+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 20 von 21

JAVA - mitzählen von erstellten objekten

Eine Diskussion über JAVA - mitzählen von erstellten objekten im Forum Technik Ecke. Teil des Off Topic-Bereichs; hey bin gerade ziemlich verzweifelt weil ich keinen lösungsansatz habe und hoffe ihr könnt mir helfen undzwar sollen wir eine ...

  1. #1
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.

    JAVA - mitzählen von erstellten objekten

    hey bin gerade ziemlich verzweifelt weil ich keinen lösungsansatz habe und hoffe ihr könnt mir helfen
    undzwar sollen wir eine software zum an- und verkauf von goldwaren programmieren ich denke das fundament steht soweit aber an einer stelle beiße ich mir die zähne aus
    ich möchte, dass der anfangsbestand meiner ringe 3 ist
    und dass wenn ich ein object "ring" erstelle der bestand = 4 ist
    und wenn ich ein weiteres object "ring" erstelle der bestand = 5 angezeigt wird
    ich habe nun versucht eine while-schleife zu basteln aber irgenwie erhöht sich nach ablauf der schleife der bestand nicht um 1
    somit steht bei jedem erstellten ring bestand = 4
    zur verdeutlichung habe ich ein screen angehängt
    ich hoffe hier kennt sich einer aus :/
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	java2.jpg 
Hits:	75 
Größe:	219,0 KB 
ID:	73352  
    Geändert von RushCabal (11.01.2011 um 22:42 Uhr)

  2. #2
    Ich denke du hast den Quellcode schon zu oft gesehen.

    In deinem Beispiel steht:
    1.  
    2. int x = 3;
    3. int y = 1;
    4.  
    5. while(this.anzahlringe < x+y)
    6. {
    7. this.anzahlringe++;
    8. }
    9.  

    Etwas anders geschrieben wird der Fehler ganz klar.

    1.  
    2. while(this.anzahlringe < 4)
    3. {
    4. this.anzahlringe++;
    5. }
    6. int x = 3;
    7. int y = 1;
    8.  

    Da du x und y immer mit 3 und 1 initialisierst, ist es somit an der Stelle, wo es um die Erhöhung des Wertes von "this.anzahlringe" geht auch immer 4. Somit ist die Bedingung der While-Schleife nur solange erfüllt, wie this.anzahlringe < 4 ist. Vor der letzten augeführten Erhöhung ist this.anzahlringe also noch 3 und nach der letzten inkrementierung 4. Danach wird die Bedingung nicht mehr erfüllt.

    Hau einfach die While-Schleife raus und mach daraus nur:
    1.  
    2. this.anzahlringe++;
    3.  

    Und sofern du x und y noch benötigst:
    1.  
    2. int x = 3;
    3. int y = 1;
    4.  
    5. this.anzahlringe++;
    6.  

  3. #3
    (:
    Avatar von Liontiger
    Registriert seit
    09.07.2004
    Ort
    Siegen
    Alter
    29
    Beiträge
    1.038
    Name
    Tim
    Nick
    Liontiger
    Clans
    ToC
    erscheint mir anhand des codes ziemlich logisch o0

    du setzt initial deine Variable auf 3
    im Konstruktor hast du dann ne while schleife deren Bedingung (anzahlringe < x+y ) lautet
    x & y sind beide konstant bei dir und x+y ist 4 - wenn das also einmal durchgelaufen ist, ist anzahlringe = x+y = 4 und es wird nicht weitergezählt


    edit:
    osbes war schneller

  4. #4
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.
    ja klar logisch
    aber leider bezieht sich der neue ring wieder auf die 3 und spuckt dann bestand = 4 aus....
    ich weiß nicht wie ich es hinbekomme, dass oben die 3 mit der anzahl der erstellten objekte wächst
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	java3.jpg 
Hits:	19 
Größe:	225,1 KB 
ID:	73356  

  5. #5
    Dafür gibt es das Schlüsselwort static.

    1.  
    2. static int anzahlringe = 3;
    3.  

  6. #6
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.
    -_-
    sagt mir leider nix
    haben leider bisher nur basics gemacht (9 vorlesungen bisher gehabt)
    werde dann wohl ein buch lesen müssen wegen so einer scheiße -___-
    trotzdem danke

  7. #7
    Obergefreiter
    Avatar von d4rkkenny
    Registriert seit
    22.11.2002
    Alter
    29
    Beiträge
    218
    Das Attribut static macht deine Variable zu einer Klassenvariablen oder anders ausgedrueckt, die Variable ist durch static nicht mehr an ein Objekt gebunden. Ohne static hat jedes Objekt, welches du erzeugst eine eigenes Attribut 'anzahlringe', welches unabhaengig von den anderen Instanzen behandelt wird. Nach dem initialisieren hattest du dieses in jedem Objekt fuer sich alleine inkrementiert. Mit static loest du nun 'anzahlringe' aus dem Objektkontext heraus und macht es somit "global" verfuegbar. Daher koennen nun alle Objekte auf ein und die selbe Variable zugreifen und diese dann auch richtig inkrementieren.

  8. #8
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.
    vielen dank
    ihr habt mich echt einen großen schritt weitergebracht
    renos gibts morgen

  9. #9
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.
    Sooooo meine freunde ich melde mich mit einem neuen Prob. zurück und hoffe ihr könnt mir erneut helfen

    das Prob. stellt sich folgendermaßen dar.
    Ich habe eine array liste gebaut, die man auch auf der konsole ausgeben kann - nun möchte ich jedoch, dass diese liste tabellarisch dargestellt wird.
    das soll bedeuten, dass die anzahl der spalten fix ist aber die anzahl der zeilen varrierbar ist, sodass man neu erstelle objekte ebenfalls in diese arrayliste hinzufügen kann.
    natrülich habe ich das prob. schon gegoogelt aber finde keine antwort die mich hinreichend befriedigt und hoffe ihr könnt mir wieder helfen

    optimal wäre folgendes:

    Kunden ID | Name | Vorname | Telefonnummer
    ----------------------------------------------------------------
    101 | Peter | Wasweißich | 019044444
    ----------------------------------------------------------------
    102 usw.

    Klicke auf die Grafik für eine größere Ansicht 

Name:	Unbenannt.JPG 
Hits:	27 
Größe:	184,3 KB 
ID:	73479

  10. #10
    (:
    Avatar von Liontiger
    Registriert seit
    09.07.2004
    Ort
    Siegen
    Alter
    29
    Beiträge
    1.038
    Name
    Tim
    Nick
    Liontiger
    Clans
    ToC
    du kannst dafür die printf Methode nutzen, damit kannst du recht elegant auch tabellarische Ausgaben erstellen

    habe hier mal ein kleines Beispiel das recht nah an deinem problem ist gebastelt:

    1.  
    2. import java.util.LinkedList;
    3. import java.util.ListIterator;
    4.  
    5. public class GoldShop {
    6. LinkedList<Kunde> kunden = null;
    7.  
    8. class Kunde {
    9. String name, vorname, telefon = null;
    10.  
    11. public Kunde(String name, String vorname, String telefon) {
    12. this.name = name;
    13. this.vorname = vorname;
    14. this.telefon = telefon;
    15. }
    16. }
    17.  
    18. public GoldShop() {
    19. kunden = new LinkedList<Kunde>();
    20. kunden.add(new Kunde("Meier", "Hans-Christian", "012356172341"));
    21. kunden.add(new Kunde("Peter", "Klaus", "012356157232"));
    22. kunden.add(new Kunde("Heinrich-Hermann", "Otto", "333344441751"));
    23. }
    24.  
    25. private void printCustomers() {
    26. ListIterator<Kunde> kundenIterator = kunden.listIterator();
    27. Kunde curr = null;
    28. int laengsterVorname = 15;
    29. while (kundenIterator.hasNext()) {
    30. curr = (Kunde) kundenIterator.next();
    31. System.out.printf("%-20s | %-" + laengsterVorname + "s | %s \n",
    32. curr.name, curr.vorname, curr.telefon);
    33. }
    34.  
    35. }
    36.  
    37. public static void main(String[] args) {
    38. GoldShop myGoldShop = new GoldShop();
    39. myGoldShop.printCustomers();
    40. }
    41. }
    42.  

    habe da mit 3 Varianten gearbeitet, da du den Parametern die printf bekommt immer auch eine Länge mitgeben kannst

    System.out.printf("%-20s | %-" + laengsterVorname + "s | %s \n", curr.name, curr.vorname, curr.telefon);

    Der Standard um einfach nur einen String auszugeben wäre "%s", das habe ich in dem Fall für die Telefonnummer genutzt - "%-20s" hier steht die 20 für die Länge die für diesen String genutzt werden soll, das minuszeichen steht für 'linksbündig'
    die Variante "blabla | %"+laengsterVorname+"s | blabla..." ist im Prinzip das selbe - nur wurde die 20 durch eine Variable ersetzt - du könntest also vor der Ausgabe jeweils das längste Element jeder Spalte bestimmen und dann dort eintragen, dann kommt ne hübsche Tabelle raus
    in dem Beispiel hier habe ich mir das Bestimmen des längsten Elements mal gespart, das dürfteste du ja selber hinbekommen, denke ich

  11. #11
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.
    und wieder habe ich einen kleinen hänger -__-

    undzwar fehlen noch genau zwei dinge bis zur vollendung meines meisterwerks D
    jedoch hänge ich wieder an einer(zwei) stelle(n)

    undzwar möchte ich, nach einem bestimmten produkt oder namen suchen können, den er dann tabellarisch ausgibt

    z.B. such nach Kunden: Hermann

    ID | Name | Vorname | Telefonnummer
    ----------------------------------------------------
    102| Klaus | Herrmann | 0190555555555


    das zweite Prob. ist, dass wenn ich einen Artikel verkaufe, dass dieser anschließend aus meiner Arrayliste verschwindet (und keine Lücke entsteht)
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	-_-.JPG 
Hits:	20 
Größe:	92,1 KB 
ID:	73531  
    Geändert von RushCabal (20.01.2011 um 22:20 Uhr)

  12. #12
    (:
    Avatar von Liontiger
    Registriert seit
    09.07.2004
    Ort
    Siegen
    Alter
    29
    Beiträge
    1.038
    Name
    Tim
    Nick
    Liontiger
    Clans
    ToC
    verstehe bei beiden Problemen nicht so ganz wo es da hakt
    im Suchen-Fall schnappst du dir deinen Iterator auf der Liste und iterierst drüber, bis das aktuelle Element (das solltest du dir in jeder Iteration zwischenspeichern), das Element ist, das du suchst - danach musst du ja nur noch die Daten deines aktuellen Elements ausgeben.

    der verkaufs-fall läuft ähnlich ab - du suchst dir dein Element wieder und rufst dann auf deinem Iterator die remove-Methode auf.

  13. #13
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.
    wie heißen die befehle dafür, wenn ich fragen darf?

  14. #14
    (:
    Avatar von Liontiger
    Registriert seit
    09.07.2004
    Ort
    Siegen
    Alter
    29
    Beiträge
    1.038
    Name
    Tim
    Nick
    Liontiger
    Clans
    ToC
    ich hab mein Beispielprogramm einfach mal weitergeführt - wichtig für dich sind die Funktionen printCustomer und deleteCustomer
    1.  
    2. import java.util.LinkedList;
    3. import java.util.ListIterator;
    4.  
    5. public class GoldShop {
    6. LinkedList<Kunde> kunden = null;
    7.  
    8. class Kunde {
    9. String name, vorname, telefon = null;
    10.  
    11. public Kunde(String name, String vorname, String telefon) {
    12. this.name = name;
    13. this.vorname = vorname;
    14. this.telefon = telefon;
    15. }
    16. }
    17.  
    18. public GoldShop() {
    19. kunden = new LinkedList<Kunde>();
    20. kunden.add(new Kunde("Meier", "Hans-Christian", "012356172341"));
    21. kunden.add(new Kunde("Hermann", "Peter", "337123441751"));
    22. kunden.add(new Kunde("Peter", "Klaus", "012356157232"));
    23. kunden.add(new Kunde("Heinrich-Hermann", "Otto", "333344441751"));
    24. }
    25.  
    26. private void printCustomers() {
    27. ListIterator<Kunde> kundenIterator = kunden.listIterator();
    28. Kunde curr = null;
    29. int laengsterVorname = 15;
    30. while (kundenIterator.hasNext()) {
    31. curr = (Kunde) kundenIterator.next();
    32. System.out.printf("%-20s | %-" + laengsterVorname + "s | %s \n",
    33. curr.name, curr.vorname, curr.telefon);
    34. }
    35. }
    36.  
    37. private void printCustomer(String name) {
    38. ListIterator<Kunde> kundenIterator = kunden.listIterator();
    39. while (kundenIterator.hasNext()) {
    40. Kunde curr = (Kunde) kundenIterator.next();
    41. if (curr.name.equals(name)) {
    42. System.out.printf("%-20s | %-15s | %s \n", curr.name,
    43. curr.vorname, curr.telefon);
    44. }
    45. }
    46. }
    47.  
    48. private void deleteCustomer(String name) {
    49. ListIterator<Kunde> kundenIterator = kunden.listIterator();
    50. while (kundenIterator.hasNext()) {
    51. Kunde curr = (Kunde) kundenIterator.next();
    52.  
    53. if (curr.name.equals(name)) {
    54. kundenIterator.remove();
    55. break;
    56. }
    57. }
    58. }
    59.  
    60. public static void main(String[] args) {
    61. GoldShop myGoldShop = new GoldShop();
    62. myGoldShop.printCustomers();
    63. System.out.println("\n\n");
    64. System.out.println("Der Kunde Hermann");
    65. myGoldShop.printCustomer("Hermann");
    66. System.out.println("\n\nKunde Hermann wird entfernt\n");
    67. myGoldShop.deleteCustomer("Hermann");
    68. myGoldShop.printCustomers();
    69. }
    70. }

  15. #15
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.
    eine hyopsbotschatft

    habe überlesen, dass der Goldpreis variabel sein soll.... aber sie sind in meinem Quelltext fix, da ich folgendermaßen definiert habe:

    Golpreis333=10
    Goldpreis555=20
    Goldpreis777=27
    ich habe nun eine setGoldpreis methode geschrieben, welche sagt: Goldpreis333=eingabe
    nun habe ich aber folgendes Problem:
    Verändere ich nun den Goldpreis, dann nimmt nur ein neu erstelltes Produkt den neuen Wert an aber die anderen 3Artiel, die ich als Grundbestand definiert habe, bleiben unverändert und nehmen mit 10,20 oder 27 mal
    (da Preis = Gewicht*Goldpreisxxx)

    Wie bekomm ich es nun hin, dass die 3 Grunbestandsartikel nicht mit den fixen zahlen multiplizieren, sondern nachdem ich den Goldpreis abgeändert habe ihren Pries neu kalkulieren und sie in meiner Tabelle ausgeben???



    Meine Idee war wie folgt:
    public class Goldpreis
    {
    public static double kurs;
    public static double goldpreis333 = 10*kurs;
    public static double goldpreis555 = 20*kurs;
    public static double goldpreis777 = 27*kurs;


    public void setKurs(double kurs)
    {
    double eingabe;
    eingabe = Stdin.readlnDouble();
    if (eingabe != 1)
    {
    kurs = eingabe;
    }
    else
    {
    kurs = 1;
    }


    }


    was jedoch dazu führt, dass der Preis bei jedem Artikel 0 ist -__-

    brauche dringend hilfe - weiß echt keinen rat mehr

  16. #16
    (:
    Avatar von Liontiger
    Registriert seit
    09.07.2004
    Ort
    Siegen
    Alter
    29
    Beiträge
    1.038
    Name
    Tim
    Nick
    Liontiger
    Clans
    ToC
    an welchem Punkt berechnest du denn den Preis eines jeden Produkts?

    du könntest doch nachdem du den Goldpreis geändert hast, deine Collection mit den Produkten durchgehen und jedem Objekt sagen, es möge seinen Preis neu berechnen o.Ä.

  17. #17
    King of Kingz
    Avatar von RushCabal
    Registriert seit
    03.01.2003
    Ort
    Saarbrücken
    Beiträge
    3.916
    Nick
    Fre3win
    Clans
    vMc.
    es läuft bisher folgendermaßen
    die produkte, die ich im bestand habe nehmen bei reinheit333 den preis 10*gewicht
    verändere ich nun den wert der reinheit - sagen wir mal 11 - multipliziert nur das neu erstelle produkt mit dem wert 11 und alle vorher erstellen bleiben fix -_-
    möchte nun, dass auch die vorher erstellten produkte (auch die grundbestandsartikel) dann mit dem wert 11 multiplizieren

  18. #18
    Big & Tasty
    Avatar von baracuda
    Registriert seit
    10.11.2007
    Ort
    Köln
    Alter
    28
    Beiträge
    3.692
    Name
    Kevin
    schonmal was von set und get methoden gehohrt?
    Mach die Methode setkurs anders und bau set methoden für die verschiedenen goldpreise ein.
    Code:
    public class Goldpreis
    {
      public static double kurs;
      public static double goldpreis333;
      public static double goldpreis555;
      public static double goldpreis777;
    
    
      public void setKurs(double eingabe)
     {
       /*Die Prüfung an dieser Stelle macht keinen Sinn, da nur wenn eingabe=1 der else Zweig ausgeführt wird und damit auch kurs=eingabe sein kann. Wenn eingabe nicht kleiner als 1 sein darf ergibt das eher Sinn*/
       if (eingabe != 1)
       {
         kurs = eingabe;
       }
       else
       {
        kurs = 1; 
       }
     }
     public double getKurs(){
       return kurs;
     }
     public void setGoldpreis777(double arg){
       goldpreis777 = 27*arg;  
     }
     public void setGoldpreis333(double arg){
       goldpreis333 = 10*arg;  
     }
     public void setGoldpreis555(double arg){
       goldpreis555 = 20*arg;  
     }
     public void berechne(){
       double dbl_eingabe;
       dbl_eingabe = Stdin.readlnDouble();
       setKurs(dbl_eingabe);
       setGoldpreis333(getKurs());
       setGoldpreis555(getKurs());
       setGoldpreis777(getKurs());
     }
    }
    Ich glaub so is das eher von Erfolg gekrönt

    €: Lol Problem nicht ordentlich gelesen.
    Du musst wohl beim Ändern des Goldpreises alles Objekten die erstellt wurden sagen, dass sie ihre Preise doch neu beschaffen sollen.
    Is schon etwas länger her dass ich Java gemacht habe aber schau mal was ein EventHandler ist, darüber bekommst es sicher geregelt.
    Ansonsten musst du in der Neuberechnung eine Funktion erstellen, auf die die anderen Funktionen zugreifen wenn sie aufgerufen wird.
    Ist mir im Moment zu viel weil ich grad besuch hab
    Geändert von baracuda (04.02.2011 um 20:57 Uhr)

  19. #19
    Zitat Zitat von baracuda Beitrag anzeigen
    Is schon etwas länger her dass ich Java gemacht habe aber schau mal was ein EventHandler ist, darüber bekommst es sicher geregelt.
    Allgemeiner gesagt, solltest du dir z.B. das Observerpattern angucken (http://de.wikipedia.org/wiki/Observer_(Entwurfsmuster)) ist in Java quasi schon vorhanden (klick). Es geht sicher auch noch eleganter, aber der Code ist mir für diese Uhrzeit zu anstrengend, um mir das alles anzuschauen.
    Ist das ne Hausaufgabe oder so? Oder soll da mal was ähnliches ernsthaftes draus werden?

    Burning Squirrel

    Und nicht vergessen:
    Dieser Beitrag hat Superkuh Kräfte!

  20. #20
    Big & Tasty
    Avatar von baracuda
    Registriert seit
    10.11.2007
    Ort
    Köln
    Alter
    28
    Beiträge
    3.692
    Name
    Kevin
    Ja genau, das meinte ich doch.
    Ich guck mir auch erst morgen mal ne Lösung aus, hab schon was getrunken und will nicht mehr nachdenken.

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •