Spalten addieren

02/06/2013 20:40 EisKaffee"#1
hi!
Ich habe folgendes Problem in Visual Basics

[Only registered and activated users can see links. Click Here To Register...]

wie kann ich das umsetzen?

Teamspeak + Teamviewer wär das beste, wäre schön wenn sich wer findet :)
02/06/2013 21:46 Yakiyo#2
Einfach in einer Schleife durchlaufen lassen und in einer Variable addieren (Stichwort CINT).
02/07/2013 08:02 MoepMeep#3
Modulo.
02/07/2013 11:22 beefm4ker#4
Quote:
Originally Posted by MoepMeep View Post
Modulo.
Du weißt schon was der Modulo Operator macht?

Zu deinem Problem:
Ich würde aus deiner bisherigen Spalteneinteilung
Artikelname|Anzahl| Einkaufspreis
die Einteilung
Artikelname|Anzahl|Gold|Silber|Bronze
machen.
Somit kannst du dann die einzelnen Elemente einfacher addieren, da jetzt nur noch in einer Spalte Gold bzw Silber bzw Bronze steht. Mit deiner Spaltenteilung müsstest du erst die einzelnen Preise rausfiltern, da in deiner Spalte Einkaufspreis ja die Preise in dem Format (G: 12 S: 13 B: 15).
Wenn du es so einteilst wie ich kannst du einfach jede Spalte addieren, indem du jedes einzelne Zeile,Spalte-Paar ansprichst und den Wert in einer Variable speicherst und dann ausgibst.
02/07/2013 13:02 tolio#5
Quote:
Originally Posted by beefm4ker View Post
Du weißt schon was der Modulo Operator macht?
so ungerne ich das sage aber unrecht hat MoepMeep damit nicht...

schneller wärs mit separaten spalten das stimmt schon aber so wie es jetzt ist gehts auch
02/08/2013 07:39 MoepMeep#6
Seperate spalten, dafug. Ich weiß zwar nicht wie verkrüppelt ihr alle Programmiert, aber wenn ich schon so einen bullshit höre, muss es wirklich schlimm sein. Er hat dort oben doch eine Eingabemaske für die Daten, folglich sollte er das ganze schon als Objekt vorliegen haben.
02/09/2013 21:16 Der4StoryMan#7
Ja ich würde des Subitem einfach nach dem ":" spliten, dann das " " removen und den wert in zB Wert1 as Integer schreiben...

Das gleiche dann mit dem 2. Subitem...
Dann einfach addieren...
Und neu ausgeben...

Sind vllt 10 Code Zeilen...
02/11/2013 08:05 MoepMeep#8
Quote:
Originally Posted by Der4StoryMan View Post
Ja ich würde des Subitem einfach nach dem ":" spliten, dann das " " removen und den wert in zB Wert1 as Integer schreiben...

Das gleiche dann mit dem 2. Subitem...
Dann einfach addieren...
Und neu ausgeben...

Sind vllt 10 Code Zeilen...
dafug². Und damit wären wir wieder beim verkrüppeltem Programmieren.

Man nehme eine Klasse(natürlich mit entsprechenden Konstruktoren):

Code:
class Geld {
   public int bronze { get; set; }
   public int silber { get; set; }
   public int gold { get; set; }
}
Erzeuge eine Liste
Code:
List<Geld> geldListe = new List<Geld>();
und speichert alle Werte dort ab.

Zählt alles zusammen
Code:
int bronze = 0;
int silber = 0;
int gold = 0;
foreach(Geld geld in geldListe) {
   bronze += geld.bronze;
   silber += geld.silber;
   gold += geld.gold;
}
Geld gesamtGeld = new Geld(bronze, silber, gold);
Rechnet das ganze entsprechend aus

Code:
public string ausrechnen(Geld gesamtgeld) {
return "G:" + (gold + (silber/100)) + "S:" + ((silber%100) + bronze/100) + "B:" + (bronze%100);
}
Macht es noch ein wenig schöner, benennt alles sinnvoller und behebt gegebenenfalls fehler.

Es ist echt verdammt schwer halbwegs vernünftigen Code zu schreiben. :|
02/12/2013 15:37 Popicker#9
Hey Leute,

ich gebe MoepMoep so ziemlich Recht. Sein Lösungsansatz ist deutlich besser als hässliches gesplitte.

Du solltest deine Daten die du anzeigst immer als Objekt halten. In deinem Fall eine Collection.

Zu MoepMoeps Lösungsvoschlag würde ich etwas ändern, aber nur wenn folgende Umstände richtig sein sollten.

Sollte die Werte Gold, Silber und Bronze einfach nur Kategorien sein um es leichter zu erkennen wie bei World of Warcraft ( oder wie im Verhältnis bei Gramm, Kilogramm und Tonnen ), dann würde ich vorschlagen diese Kategorien nur zum Anzeigen zu nutzen und in deiner Klasse eine Property erstellen die nur die kleinste Einheit speichert.

Deine Klasse könnte so aussehen:

Code:
        public class Order
	{
		//Eindeutige Bezeichner sind immer nett!
		public int Id { get; set; }
		//Artikelname
		public string Name {get; set;}
		//Anzahl
		public int Amount {get;set;}
		//Preis für ein Artikel
		public UInt32 Price { get; set; }
		//Gesampreis
		public UInt64 OverallPrice 
		{
			get { return ((UInt64)Amount) * ((UInt64)Price);}
		}
	}
zum Anzeigen rechnest du dann einfach die Anzahl von Bronze, Silber und Gold aus. Das kannst du auch schon in der Klasse machen wenn du magst, mit folgenden Gettern:

Code:
		//Berechnung auf Grundlage der Annahme, dass 1 Silber == 100 Bronze und 1 Gold == 100 Silber sind.
		public int Gold {
			get { return (int) (OverallPrice / 10000); }
		}

		public int Silver {
			get { return (int) (OverallPrice % 10000) / 100; }
		}

		public int Bronze {
			get { return (int) (OverallPrice % 100); }
		}
Je nachdem wie Oft du auf die Daten zugreift ohne sie zu Ändern macht es sicher auch sinn die Ergebnisse der Properties die berechnet werden in einer privaten Variable zu cachen. So musst du dich auch nicht darum kümmern wie du die Sachen addierst, da ich einfach davon ausgehe, dass zwischen den drei Preiswerten eine Verbindung besteht. ( Geht darum, dass wenn du zu 80 Bronze noch 30 addierst du wahrscheinlich 1 Silber und 10 Bronze haben möchtest ).

P.S.: Es handelt sich hierbei um C# Code und nicht VB.NET.