Methodenaufruf - Inhaltsveränderung

Ofof91

Aktives Mitglied
Das eingelesene bzw.eingegebene in der Methode "addFeature" möchte ich in der Methode "printFeatures" aufrufen. Bekomme aber folgende Fehlermeldung: NullPointerException

Das Aufrufen funktioniert in der Methode "addFeature" (habe es schon ausprobiert) und mit System.out.println habe ich es ausgegeben, es wird genau das, was ich eingegeben habe, ausgegeben. Nur wie schon gesagt, funktioniert das in der Methode "printFeatures" nicht.

Obwohl zuerst die Methode addFeature ausgeführt wird.

Einige Hinweise noch: Die Fehlermeldung verweist auf die Zeile, wo "return features[0].getDescription();" steht. Außerdem habe ich den Eingabeparameter "newfeature" auch einfach ignoriert, weil ich nicht wüsste, was ich damit anfangen sollte. Laut Angabe sollte man es aber so realisieren. Nur das ist aber eh nicht das Problem, sondern warum im features[0] in der Methode "addFeature" was drinnen steht, und in der Methode "printFeatures" aber nicht. Obwohl wie schon gesagt zuerst die Methode addFeature ausgeführt wird, wo dann der Inhalt hinkommt ist ungewiss.


Java:
public boolean addFeature(Feature newfeature)
     {
       choice="Hi";
      
       for(count=0;count<(features.length-1)&&!choice.equals("");count++) 
       {    
        System.out.println("Please enter a feature (name=description) or hit enter to return");
        choice=Input.readString();
        String[] split=choice.split("=");
        System.out.println(choice);
        
            if(!choice.equals(""))
            {
             System.out.println(split[0]);
             System.out.println(split[1]);
             Feature feat=new Feature(split[0],split[1]);
             features[count]=feat;  
            }
        
       } 
      
      return true;
     }        
     
     public String printFeatures()
     {
      return features[0].getDescription();
     }     


 
public class Feature {
    
    String description, name;
    
    
    public Feature(String name, String description)
     {
       this.name=name;
       this.description=description;
     }
    
         
     String getDescription()
     {
       return description;
     } 
      
     String getName()
     {
       return name;
     }
}
 
Zuletzt bearbeitet:

imillitay

Mitglied
Meine Glaskugel verraet mir, dass du das Feature erstellen sollst, bevor die Methode addFeature aufgerufen wird und dieses neu erstellte Feature dann der Methode als Parameter uebergeben wird.
Wenn das Feature (vermutlich nicht mehrere) erfolgreich hinzugefuegt werden konnte, wird true zurueckgegeben, ansonsten wahrscheinlich false.


Der Code ist ansonsten leider ein wenig aus dem Zusammenhang gerissen. Wo kommt features[] her? Wo und wie rufst du die beiden Feature-Methoden auf?
 
N

nillehammer

Gast
Erst Mal allgemein Methoden sollten das machen, was ihr Name erahnen lässt. Die Methode:
Java:
public boolean addFeature(Feature newfeature)
Sollte wirklich das Feature entgegennehmen und adden. Nicht -wie bei Dir- über einen Array iterieren, irgendwelche Eingaben abfragen und dann abhängig von Bedingungen bestimmte Felder eines Arrays setzen. Gleiches gilt für:
Java:
public String printFeatures()
Dieser Name lässt erwarten, dass die Features irgendwo ausgegeben werden sollen und nicht die Description eines wahllos ausgewählten zurückgegeben.

Das nur vorweg. Es ist schon ohne irreführende Namen schwer genug, Abläufe nachzuvollziehen.

Und zu Deiner Frage:
Alle Elemente von Objekt-Arrays werden defaultmäßig mit null initialisiert. (Wusstest Du vielleicht schon). Du versuchst, mit Deinem Code das Array mit nicht-null Objekten zu füllen. Aufgrund der vielen Bedingungen in Deinem Code, kann es durchaus passieren, dass features[0] nicht befüllt wird. Einige Möglichkeiten dafür:
- features hat die Länge 1
- choice ist vielleicht tatsächlich mal ""
 

Ofof91

Aktives Mitglied
Meine Glaskugel verraet mir, dass du das Feature erstellen sollst, bevor die Methode addFeature aufgerufen wird und dieses neu erstellte Feature dann der Methode als Parameter uebergeben wird.
Wenn das Feature (vermutlich nicht mehrere) erfolgreich hinzugefuegt werden konnte, wird true zurueckgegeben, ansonsten wahrscheinlich false.


Der Code ist ansonsten leider ein wenig aus dem Zusammenhang gerissen. Wo kommt features[] her? Wo und wie rufst du die beiden Feature-Methoden auf?


Ich habe es so umgebaut, wie es du beschrieben hast, nun funktioniert es genauso mit dem Unterschied dass auch newfeature verwendet wird. Das Problem mit dem NullPointer Exception besteht nach wie vor.

Java:
//ein Teil vom Hauptprogramm:

case 2:     System.out.println("Please enter the product's name:");
                String productname=Input.readString();
                System.out.println("Please enter the product's price:");
                double price=Input.readDouble();
                newproduct=new Product(productname,price); 
               
                String choicefeature="Hi";
      
                for(count=0;count<9&&!choicefeature.equals("");count++) 
                {   
                 System.out.println("Please enter a feature (name=description) or hit enter to return");
                 choicefeature=Input.readString();
                 String[] split=choicefeature.split("=");
                 System.out.println(choicefeature);
                      
                    if(!choicefeature.equals(""))
                    {
                     Feature newfeature=new Feature(split[0],split[1]);
                    
                       if(newproduct.addFeature(newfeature))
                       {
                        System.out.println("Features added successfully!");
                       }
                    }
                }
                                
                
                if(shop.addProduct(newproduct))
                {
                  System.out.println("Product added successfully!");
                }
                
                break;

case 4: System.out.println(newproduct.printFeatures());break;

//Klasse Product:

     Feature[] features=new Feature[MAX_NUM_FEATURES];

     int count=0;
    
     public boolean addFeature(Feature newfeature)
     {
      features[count]=newfeature;  
      count++;
      return true;
     }        
     
     public String printFeatures()
     {
      String a=features[0].getDescription();   
      return a;
     }     


//Klasse Feature:


public class Feature {
    
    String description, name;
    
    
    public Feature(String name, String description)
     {
       this.name=name;
       this.description=description;
     }
    
         
     String getDescription()
     {
       return description;
     } 
      
     String getName()
     {
       return name;
     }
}
 
Zuletzt bearbeitet:

Ofof91

Aktives Mitglied
Erst Mal allgemein Methoden sollten das machen, was ihr Name erahnen lässt. Die Methode:
Java:
public boolean addFeature(Feature newfeature)
Sollte wirklich das Feature entgegennehmen und adden. Nicht -wie bei Dir- über einen Array iterieren, irgendwelche Eingaben abfragen und dann abhängig von Bedingungen bestimmte Felder eines Arrays setzen. Gleiches gilt für:
Java:
public String printFeatures()
Dieser Name lässt erwarten, dass die Features irgendwo ausgegeben werden sollen und nicht die Description eines wahllos ausgewählten zurückgegeben.

Das nur vorweg. Es ist schon ohne irreführende Namen schwer genug, Abläufe nachzuvollziehen.

Und zu Deiner Frage:
Alle Elemente von Objekt-Arrays werden defaultmäßig mit null initialisiert. (Wusstest Du vielleicht schon). Du versuchst, mit Deinem Code das Array mit nicht-null Objekten zu füllen. Aufgrund der vielen Bedingungen in Deinem Code, kann es durchaus passieren, dass features[0] nicht befüllt wird. Einige Möglichkeiten dafür:
- features hat die Länge 1
- choice ist vielleicht tatsächlich mal ""

Bei mir wird ja eh ein feature hinzugefügt, und zwar in ein Feld vom Datentyp Feature. Laut Angabe sollte das so realisiert werden.

Die Methode "printFeatures" liefert einen String zurück, das heißt alle Strings sollten in dieser Methode verknüpft und dann zurückgegeben werden. Description habe ich als Beispiel hergenommen.
 

imillitay

Mitglied
Ich sehe da jetzt immer noch nicht, wo du printFeatures aufrufst? Kann es sein, dass du das bei einem anderen Product-Objekt machst?


Java:
 public boolean addFeature(Feature newfeature)
     {
      features[count]=newfeature;  
      count++;
      return true;
     }

Das wird dir frueher oder spaeter eine ArrayIndexOutOfBoundsException werfen. Stelle sicher, dass count nicht die Groesse des Arrays uebersteigt und ueberlege, was die Methode in so einem Fall zurueckgeben sollte.

Ausserdem:

Die Methode "printFeatures" liefert einen String zurück, das heißt alle Strings sollten in dieser Methode verknüpft und dann zurückgegeben werden.

Wie schon erwaehnt, wird das Array mit null initialisiert. Wenn du also durch das Array iterierst, musst du sowieso auf null ueberpruefen. Alternativ koenntest du auch eine verkettete (da du ja anscheinend auf die Features nicht per Index zugreifen musst) Liste verwenden. (EDIT: Ok, darfst du ja laut deinem vorherigen Post nicht.)
 
Zuletzt bearbeitet:

Ofof91

Aktives Mitglied
Das wäre vielleicht auch noch wichtig:

Java:
//Hauptprogramm:

case 4: System.out.println(newproduct.printFeatures());break;

Wenn der Benutzer 4 eingibt, sollte, das was er (nach dem er 2 eingegeben hat) eingegeben hat, nämlich name=description ausgegeben werden. Genau da scheiterts aber.
 

Ofof91

Aktives Mitglied
Ich sehe da jetzt immer noch nicht, wo du printFeatures aufrufst? Kann es sein, dass du das bei einem anderen Product-Objekt machst?


Java:
 public boolean addFeature(Feature newfeature)
     {
      features[count]=newfeature;  
      count++;
      return true;
     }

Das wird dir frueher oder spaeter eine ArrayIndexOutOfBoundsException werfen. Stelle sicher, dass count nicht die Groesse des Arrays uebersteigt und ueberlege, was die Methode in so einem Fall zurueckgeben sollte.

Nein, das habe ich ja im Hauptprogramm abgesichert. Und zwar mit der For-Schleifen-Bedingung. Das Feld hat die Länge 10, und die Schleife wird auch 10 mal ausgeführt.

Im case 4 wird printFeatures aufgerufen. Beim vorherigen Post haben ich den Code..

Ausserdem:

Wie schon erwaehnt, wird das Array mit null initialisiert. Wenn du also durch das Array iterierst, musst du sowieso auf null ueberpruefen. Alternativ koenntest du auch eine verkettete (da du ja anscheinend auf die Features nicht per Index zugreifen musst) Liste verwenden.

Ja aber in diesem Fall steht im features[count] ja was drinnen, nämlich das was in der Methode "addFeature" zugewiesen wurde.
 
Zuletzt bearbeitet:

imillitay

Mitglied
Nein, das habe ich ja im Hauptprogramm abgesichert. Und zwar mit der For-Schleifen-Bedingung. Das Feld hat die Länge 10, und die Schleife wird auch 10 mal ausgeführt.

Das ist schlechtes Design. Das Objekt sollte da selber dafuer sorgen, dass seine Instanzvariablen im korrekten Bereich liegen. Und deine addFeature-Methode gibt immer noch kein false zurueck, wenn das Feature nicht hinzugefuegt werden konnte.

Fuer deine NullPointerException: Wirf mal den Debugger an und beobachte den Inhalt deines Arrays. Dann solltest du ja sehen, ob es wirklich gefuellt wird bzw. ab wo es das scheinbar nicht mehr ist.
 

Ofof91

Aktives Mitglied
Das ist schlechtes Design. Das Objekt sollte da selber dafuer sorgen, dass seine Instanzvariablen im korrekten Bereich liegen. Und deine addFeature-Methode gibt immer noch kein false zurueck, wenn das Feature nicht hinzugefuegt werden konnte.

Fuer deine NullPointerException: Wirf mal den Debugger an und beobachte den Inhalt deines Arrays. Dann solltest du ja sehen, ob es wirklich gefuellt wird bzw. ab wo es das scheinbar nicht mehr ist.

Und was würde mir das bringen, wenn ich nicht weiß warum es nicht gefüllt wurde? :)
 

imillitay

Mitglied
Dann kannst du die Fehlersuche eingrenzen und weisst, welche Teile funktionierten/nicht funktionieren.
Ich glaube uebrigens immer noch, dass es an der Referenz newproduct liegt. Kannst du den Rest des Programms posten?
 

Ofof91

Aktives Mitglied
Dann kannst du die Fehlersuche eingrenzen und weisst, welche Teile funktionierten/nicht funktionieren.
Ich glaube uebrigens immer noch, dass es an der Referenz newproduct liegt. Kannst du den Rest des Programms posten?

Ich habe eigentlich alles was relavant sein würden, gepostet. Newfeature kommt eigentlich sonst nirgends mehr vor. Was würdest noch gerne wissen?
 

imillitay

Mitglied
Habe dein Programm bei mir rekonstruiert und es funktioniert einwandfrei. Der Fehler wird also in dem Teil liegen, den du nicht gepostet hast.

ich habe newproduct geschrieben und nicht newfeature. Wo und wie wird newproduct initialisiert? Wie sieht deine Hauptschleife, die du vermutlich verwenden wirst, aus und was machst du dort mit newproduct?
 

Ofof91

Aktives Mitglied
Habe dein Programm bei mir rekonstruiert und es funktioniert einwandfrei. Der Fehler wird also in dem Teil liegen, den du nicht gepostet hast.

ich habe newproduct geschrieben und nicht newfeature. Wo und wie wird newproduct initialisiert? Wie sieht deine Hauptschleife, die du vermutlich verwenden wirst, aus und was machst du dort mit newproduct?

Nein alles andere gehört gar nicht dazu, außerdem ist es ziemlich egal ob man newproduct oder newfeature schreibt. Das ist ja nur ein Objektname.

Es dürfte aber nicht funktionieren, wenn man "4" eingibt, müsste schon die Fehlermeldung "NullPointerException" kommen. Hast du das schon ausprobiert?
 

imillitay

Mitglied
Ich meinte, dass ich wissen wollte, wo newproduct verwendet wird. Da hast du dich oben verlesen, schau mal nach.
Das sind zwei verschiedene Objekte, daher ist es nicht egal.

Wenn du mir keine weiteren Informationen gibst, kann ich dir leider nicht helfen. :pueh: Wie gesagt, bei mir funktioniert es, es liegt also am Rest deines Codes.
 

Ofof91

Aktives Mitglied
Ich meinte, dass ich wissen wollte, wo newproduct verwendet wird. Da hast du dich oben verlesen, schau mal nach.
Das sind zwei verschiedene Objekte, daher ist es nicht egal.

Wenn du mir keine weiteren Informationen gibst, kann ich dir leider nicht helfen. :pueh: Wie gesagt, bei mir funktioniert es, es liegt also am Rest deines Codes.

Ah ja stimmt...Das macht aber die ganze Sache komplizierter...

Hast du eigentlich das Programm mit der Eingabe "4" auch schon getestet? Müsste die Fehlermeldung kommen...

Hier wird newproduct verwendet..

Java:
     //class Shop:

     final static int MAX_NUM_PRODUCTS=100; 
     int newproductcount=3, num=0, i=1;
     String all="", name;
          
     Product[] products=new Product[MAX_NUM_PRODUCTS];
     
     public Shop(String name)
     {
      this.name=name;
     }        
     
     String getName()
     {
       return name;
     }
     
     public boolean addProduct(Product newproduct)
     {  
         newproductcount++;
         products[newproductcount]=newproduct;
                        
         if(newproductcount<101)
         {
          products[newproductcount]=newproduct;   
          return true;
         }   
         else
         {    
          return false;
         }
     }
          
     public String printProducts()
     {              
         Product pc=new Product("PC",200);    
         products[0]=pc;
     	 String computer="[0] "+ products[0].getName()+ products[0].getProductnumber()+"\n";
         Product phone=new Product("Phone",300);
         products[1]=phone;
         String phones="[1] "+ products[1].getName()+ products[1].getProductnumber()+"\n";
         Product tablet=new Product("Tablet",300);
         products[2]=tablet;
         String tablets="[2] "+ products[2].getName()+ products[2].getProductnumber()+"\n";
         Product player=new Product("MP3-Player",300);
         products[3]=player;         
         String mp3="[3] "+ products[3].getName()+ products[3].getProductnumber()+"\n";
                  
         if(newproductcount<4)
         {    
          all=computer+phones+tablets+mp3;
         }

         
         if(newproductcount>=4) 
         { 
          all=computer+phones+tablets+mp3;   
          num=newproductcount-3;
          newproductcount=4;
            for(i=1;i<=num;i++)
            {  
             all=all+"["+newproductcount+"] "+products[newproductcount].getName()+ products[newproductcount].getProductnumber()+"\n";
             newproductcount++;
            }
          newproductcount=num+3;  
         }
 

imillitay

Mitglied
Nein, ich wollte wissen wo das newproduct verwendet/instanziiert wird das dort bei deinem switch umhergereicht wird.

Aus deinem Beitrag um 21:02:
Java:
 newproduct=new Product(productname,price);
Wo kommt diese Variable her? Wo wird sie deklariert und wird sie vielleicht noch irgendwo anders veraendert?


Java:
Hast du eigentlich das Programm mit der Eingabe "4" auch schon getestet? Müsste die Fehlermeldung kommen...
Ja, funktioniert bei mir.
 

Ofof91

Aktives Mitglied
Nein, ich wollte wissen wo das newproduct verwendet/instanziiert wird das dort bei deinem switch umhergereicht wird.

Aus deinem Beitrag um 21:02:
Java:
 newproduct=new Product(productname,price);
Wo kommt diese Variable her? Wo wird sie deklariert und wird sie vielleicht noch irgendwo anders veraendert?


Java:
Hast du eigentlich das Programm mit der Eingabe "4" auch schon getestet? Müsste die Fehlermeldung kommen...
Ja, funktioniert bei mir.

Java:
Product newproduct=new Product("Sony",500);   
       
       switch(choice)
       {
        case 1: System.out.println(shop.printProducts());break;
        case 2: System.out.println("Please enter the product's name:");
                String productname=Input.readString();
                System.out.println("Please enter the product's price:");
                double price=Input.readDouble();
                newproduct=new Product(productname,price);


Das gibt es aber nicht, dass das bei dir funktioniert. Kannst mal die Ausgabe posten bitte?
 

imillitay

Mitglied
Naja, es kommt eben das raus was ich eingebe, so wie man es erwartet.

Kannst du nicht einfach mal dein ganzes Programm posten? Ich vermute mal, dass bei jedem Durchlauf (gibt es mehrere Durchlaeufe bei dir?) newproduct neu initialisiert wird, da ist es natuerlich logisch, dass die Exception kommt, weil dabei auch das Array neu initialisiert wird. Da du dich aber weigerst, pro Post mehr als 5 neue Zeilen zu praesentieren, kann ich das noch nicht mit Sicherheit sagen :D

EDIT: Oder, was ich aber nicht ganz glauben kann, beendest du das Programm zwischendurch und rufst es wieder auf, um '4' einzugeben?
 
Zuletzt bearbeitet:

Ofof91

Aktives Mitglied
Naja, es kommt eben das raus was ich eingebe, so wie man es erwartet.

Kannst du nicht einfach mal dein ganzes Programm posten? Ich vermute mal, dass bei jedem Durchlauf (gibt es mehrere Durchlaeufe bei dir?) newproduct neu initialisiert wird, da ist es natuerlich logisch, dass die Exception kommt, weil dabei auch das Array neu initialisiert wird. Da du dich aber weigerst, pro Post mehr als 5 neue Zeilen zu praesentieren, kann ich das noch nicht mit Sicherheit sagen :D

EDIT: Oder, was ich aber nicht ganz glauben kann, beendest du das Programm zwischendurch und rufst es wieder auf, um '4' einzugeben?

Ja newproduct wird immer wieder neu initialisiert, naja das bringt mir alles nichts mehr, da ich es morgen schon abgeben muss, aber trotzdem möchte ich wissen was der Fehler war. Hier der ganze Code...

Java:
public class Webshop {

    public static void main(String[] args) {
    
    int choice=0, count, num=0; 
    double price=-1;
    String productname;
    
    Shop shop=new Shop("My Testshop"); 
        
    while(choice!=5)
    {   
       for(int i=0;i<30;i++)
       {
         System.out.print("=");
       }
       
       System.out.println();
       System.out.println(shop.getName());

       for(int i=0;i<30;i++)
       {
         System.out.print("=");
       }
       
       System.out.print("\n"+"\n");
            
       System.out.println("Please select option:");
       System.out.println("["+(1)+"]"+" Print product list");
       System.out.println("["+(2)+"]"+" Add product");
       System.out.println("["+(3)+"]"+" Delete product");
       System.out.println("["+(4)+"]"+" Show product details");
       System.out.println("["+(5)+"]"+" Exit program");
       
       choice=Input.readInt();
       
       while(choice>5||choice<1)
       {
        System.out.println("Not a valid input, please re-enter:");   
        System.out.println("Please select option:");
        System.out.println("["+(1)+"]"+" Print product list");
        System.out.println("["+(2)+"]"+" Add product");
        System.out.println("["+(3)+"]"+" Delete product");
        System.out.println("["+(4)+"]"+" Show product details");
        System.out.println("["+(5)+"]"+" Exit program");
        choice=Input.readInt();
       }
         
       Product newproduct=new Product("Product",500);
       
       switch(choice)
       {
        case 1: System.out.println(shop.printProducts());break;
        case 2: while(price<0)
                {
                    if(num>=1)
                    {
                     System.out.println("You have entered a negative price, please re-enter:");
                    } 
                    
                 System.out.println("Please enter the product's name:");
                 productname=Input.readString();              
                                   
                 System.out.println("Please enter the product's price:");
                 price=Input.readDouble();
                
                    if(price>=0)
                    {    
                     newproduct=new Product(productname,price); 
                    }
                    
                 String choicefeature="Hi";
      
                    for(count=0;count<9&&!choicefeature.equals("");count++) 
                    {   
                     System.out.println("Please enter a feature (name=description) or hit enter to return");
                     choicefeature=Input.readString();
                     String[] split=choicefeature.split("=");
                                       
                        if(!choicefeature.equals(""))
                        {
                         Feature newfeature=new Feature(split[0],split[1]);
                     
                         if(newproduct.addFeature(newfeature))
                         {
                          System.out.println("Features added successfully!");
                         }
                        
                        }
                    }
                                
                 if(shop.addProduct(newproduct)&&price>=0)
                 {
                  System.out.println("Product added successfully!");
                 }
                 num++; 
                } 
                price=-1;
                num=0; 
                break;
        case 4: System.out.println(newproduct.printFeatures());break; 
       } 
    }
  }
}
    

class Shop {
    
     final static int MAX_NUM_PRODUCTS=100; 
     int newproductcount=3, num=0, i=1;
     String all="", name;
          
     Product[] products=new Product[MAX_NUM_PRODUCTS];
     
     public Shop(String name)
     {
      this.name=name;
     }        
     
     String getName()
     {
       return name;
     }
     
     public boolean addProduct(Product newproduct)
     {  
         newproductcount++;
         products[newproductcount]=newproduct;
                        
         if(newproductcount<101)
         {
          products[newproductcount]=newproduct;   
          return true;
         }   
         else
         {    
          return false;
         }
     }
          
     public String printProducts()
     {              
         Product pc=new Product("PC",200);    
         products[0]=pc;
     	 String computer="[0] "+ products[0].getName()+ products[0].getProductnumber()+"\n";
         Product phone=new Product("Phone",300);
         products[1]=phone;
         String phones="[1] "+ products[1].getName()+ products[1].getProductnumber()+"\n";
         Product tablet=new Product("Tablet",300);
         products[2]=tablet;
         String tablets="[2] "+ products[2].getName()+ products[2].getProductnumber()+"\n";
         Product player=new Product("MP3-Player",300);
         products[3]=player;         
         String mp3="[3] "+ products[3].getName()+ products[3].getProductnumber()+"\n";
                  
         if(newproductcount<4)
         {    
          all=computer+phones+tablets+mp3;
         }

         
         if(newproductcount>=4) 
         { 
          all=computer+phones+tablets+mp3;   
          num=newproductcount-3;
          newproductcount=4;
            for(i=1;i<=num;i++)
            {  
             all=all+"["+newproductcount+"] "+products[newproductcount].getName()+ products[newproductcount].getProductnumber()+"\n";
             newproductcount++;
            }
          newproductcount=num+3;  
         }

                        
         return all;    
     }
}

    

class Product {
    
     String name,productnumber;
     double price;
     final static int MAX_NUM_FEATURES=10;
     
     public Product(String name, double price)
     {
       this.name=name;
       this.price=price;
       long number=(long)Math.round(Math.random()*8000000000L+1000000000L);
       String convert=Long.toString(number);
       this.productnumber="[" + "#" + convert + "]";
     }
     

     String getProductnumber()
     {
       return productnumber;
     }
      
     double getPrice()
     {
       return price;
     } 
      
     String getName()
     {
       return name;
     }
          
     Feature[] features=new Feature[MAX_NUM_FEATURES];

     int count=0;
    
     public boolean addFeature(Feature newfeature)
     {
      features[count]=newfeature;  
      count++;
      return true;
     }        
     
     public String printFeatures()
     {
      String all=features[count].getName()+features[count].getDescription();   
      return all;
     }        
}
    

class Feature {
    
    String description, name;
    
    public Feature(String name, String description)
    {
     this.name=name;
     this.description=description;
    }
    
    String getDescription()
    {
     return description;
    } 
      
    String getName()
    {   
     return name;
    }
}
 

imillitay

Mitglied
Java:
Product newproduct=new Product("Product",500);

Das ist der Fehler, wie ich schon vor einigen Beitraegen vermutet habe. Den Code wolltest du mir da aber nicht zeigen. Selber schuld :)
Hier wird bei jedem Durchlauf ein neues Objekt der Klasse Product erstellt. Das heisst, das Product, was du im vorherigen Durchlauf erstellt hast, ist weg, geloescht, nicht mehr da. Genauso also auch der Inhalt des Arrays, den du im vorherigen Durchlauf befuellt hast. Der ist jetzt auch weg und alles im neuen Array auf NULL gesetzt.

Haettest du gleich alles gepostet, haette man dir das sofort sagen koennen.

EDIT: Ach, und hier werden dann deine alten Features natuerlich auch geloescht:
Java:
newproduct=new Product(productname,price);
 

Ofof91

Aktives Mitglied
Java:
Product newproduct=new Product("Product",500);

Das ist der Fehler, wie ich schon vor einigen Beitraegen vermutet habe. Den Code wolltest du mir da aber nicht zeigen. Selber schuld :)
Hier wird bei jedem Durchlauf ein neues Objekt der Klasse Product erstellt. Das heisst, das Product, was du im vorherigen Durchlauf erstellt hast, ist weg, geloescht, nicht mehr da. Genauso also auch der Inhalt des Arrays, den du im vorherigen Durchlauf befuellt hast. Der ist jetzt auch weg und alles im neuen Array auf NULL gesetzt.

Haettest du gleich alles gepostet, haette man dir das sofort sagen koennen.

EDIT: Ach, und hier werden dann deine alten Features natuerlich auch geloescht:
Java:
newproduct=new Product(productname,price);

Ja tatsächlich, aber mit einem kleinen Fehler, wenn man einen neg. preis eingibt, und dann beim 2.Mal einen pos. Preis, dann gibt er "Product" aus, welches zur Initialisierung verwendet wurde.

Vielen Dank trotzdem.:)
 

Ofof91

Aktives Mitglied
Ja tatsächlich, aber mit einem kleinen Fehler, wenn man einen neg. preis eingibt, und dann beim 2.Mal einen pos. Preis, dann gibt er "Product" aus, welches zur Initialisierung verwendet wurde.

Vielen Dank trotzdem.:)

Wie kann ich das eigentlich wirklich machen, dass das nicht passiert?

Ist das überhaupt möglich, bei der Objekterzeugung nichts zu übergeben? Ich habe es ausprobiert, es funktioniert nicht, vielleicht kann man es anders lösen?


Java:
public class Webshop {
 
    public static void main(String[] args) {
    
    int choice=0, count, num=0; 
    double price=-1;
    String productname;
    
    Shop shop=new Shop("My Testshop"); 
    Product newproduct=new Product("Product",500);
        
    while(choice!=5)
    {   
       for(int i=0;i<30;i++)
       {
         System.out.print("=");
       }
       
       System.out.println();
       System.out.println(shop.getName());
 
       for(int i=0;i<30;i++)
       {
         System.out.print("=");
       }
       
       System.out.print("\n"+"\n");
            
       System.out.println("Please select option:");
       System.out.println("["+(1)+"]"+" Print product list");
       System.out.println("["+(2)+"]"+" Add product");
       System.out.println("["+(3)+"]"+" Delete product");
       System.out.println("["+(4)+"]"+" Show product details");
       System.out.println("["+(5)+"]"+" Exit program");
       
       choice=Input.readInt();
       
       while(choice>5||choice<1)
       {
        System.out.println("Not a valid input, please re-enter:");   
        System.out.println("Please select option:");
        System.out.println("["+(1)+"]"+" Print product list");
        System.out.println("["+(2)+"]"+" Add product");
        System.out.println("["+(3)+"]"+" Delete product");
        System.out.println("["+(4)+"]"+" Show product details");
        System.out.println("["+(5)+"]"+" Exit program");
        choice=Input.readInt();
       }
       
       switch(choice)
       {
        case 1: System.out.println(shop.printProducts());break;
        case 2: while(price<0)
                {
                    if(num>=1)
                    {
                     System.out.println("You have entered a negative price, please re-enter:");
                    } 
                    
                 System.out.println("Please enter the product's name:");
                 productname=Input.readString();              
                                   
                 System.out.println("Please enter the product's price:");
                 price=Input.readDouble();
                
                    if(price>=0)
                    {    
                     newproduct=new Product(productname,price); 
                    }
                    
                 String choicefeature="Hi";
      
                    for(count=0;count<9&&!choicefeature.equals("");count++) 
                    {   
                     System.out.println("Please enter a feature (name=description) or hit enter to return");
                     choicefeature=Input.readString();
                     String[] split=choicefeature.split("=");
                                       
                        if(!choicefeature.equals(""))
                        {
                         Feature newfeature=new Feature(split[0],split[1]);
                     
                         if(newproduct.addFeature(newfeature))
                         {
                          System.out.println("Features added successfully!");
                         }
                        
                        }
                    }
                                
                 if(shop.addProduct(newproduct)&&price>=0)
                 {
                  System.out.println("Product added successfully!");
                 }
                 num++; 
                } 
                price=-1;
                num=0; 
                break;
        case 4: System.out.println(newproduct.printFeatures());break; 
       } 
    }
  }
}
    
 
class Shop {
    
     final static int MAX_NUM_PRODUCTS=100; 
     int newproductcount=3, num=0, i=1;
     String all="", name;
          
     Product[] products=new Product[MAX_NUM_PRODUCTS];
     
     public Shop(String name)
     {
      this.name=name;
     }        
     
     String getName()
     {
       return name;
     }
     
     public boolean addProduct(Product newproduct)
     {  
         newproductcount++;
         products[newproductcount]=newproduct;
                        
         if(newproductcount<101)
         {
          products[newproductcount]=newproduct;   
          return true;
         }   
         else
         {    
          return false;
         }
     }
          
     public String printProducts()
     {              
         Product pc=new Product("PC",200);    
         products[0]=pc;
         String computer="[0] "+ products[0].getName()+ products[0].getProductnumber()+"\n";
         Product phone=new Product("Phone",300);
         products[1]=phone;
         String phones="[1] "+ products[1].getName()+ products[1].getProductnumber()+"\n";
         Product tablet=new Product("Tablet",300);
         products[2]=tablet;
         String tablets="[2] "+ products[2].getName()+ products[2].getProductnumber()+"\n";
         Product player=new Product("MP3-Player",300);
         products[3]=player;         
         String mp3="[3] "+ products[3].getName()+ products[3].getProductnumber()+"\n";
                  
         if(newproductcount<4)
         {    
          all=computer+phones+tablets+mp3;
         }
 
         
         if(newproductcount>=4) 
         { 
          all=computer+phones+tablets+mp3;   
          num=newproductcount-3;
          newproductcount=4;
            for(i=1;i<=num;i++)
            {  
             all=all+"["+newproductcount+"] "+products[newproductcount].getName()+ products[newproductcount].getProductnumber()+"\n";
             newproductcount++;
            }
          newproductcount=num+3;  
         }
 
                        
         return all;    
     }
}
 
    
 
class Product {
    
     String name,productnumber;
     double price;
     final static int MAX_NUM_FEATURES=10;
     
     public Product(String name, double price)
     {
       this.name=name;
       this.price=price;
       long number=(long)Math.round(Math.random()*8000000000L+1000000000L);
       String convert=Long.toString(number);
       this.productnumber="[" + "#" + convert + "]";
     }
     
 
     String getProductnumber()
     {
       return productnumber;
     }
      
     double getPrice()
     {
       return price;
     } 
      
     String getName()
     {
       return name;
     }
          
     Feature[] features=new Feature[MAX_NUM_FEATURES];
 
     int count=0;
    
     public boolean addFeature(Feature newfeature)
     {
      features[count]=newfeature;  
      count++;
      return true;
     }        
     
     public String printFeatures()
     {
      String all=features[count].getName()+features[count].getDescription();   
      return all;
     }        
}
    
 
class Feature {
    
    String description, name;
    
    public Feature(String name, String description)
    {
     this.name=name;
     this.description=description;
    }
    
    String getDescription()
    {
     return description;
    } 
      
    String getName()
    {   
     return name;
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Methodenaufruf mit geänderten Argumenten Java Basics - Anfänger-Themen 10
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
O Methodenaufruf Java Basics - Anfänger-Themen 5
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
Queiser Methodenaufruf Java Basics - Anfänger-Themen 2
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
I Java Methodenaufruf Java Basics - Anfänger-Themen 9
A OOP Methodenaufruf in einer anderen Klasse Java Basics - Anfänger-Themen 2
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
M Methodenaufruf in der Main Datei funzt nicht Java Basics - Anfänger-Themen 13
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
M Methodenaufruf in Methode Java Basics - Anfänger-Themen 6
M Objekt Name für MethodenAufruf nachträglich zuweisen? Java Basics - Anfänger-Themen 2
J if() mit Methodenaufruf kombiniert (Pixelerkennung) Java Basics - Anfänger-Themen 3
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
T Rekursiver Methodenaufruf funktioniert nicht Java Basics - Anfänger-Themen 7
D Methoden g.setColor funktioniert nicht bei Methodenaufruf in anderer Klasse Java Basics - Anfänger-Themen 1
M Methoden Methodenaufruf allgemein Java Basics - Anfänger-Themen 3
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
O Methodenaufruf Java Basics - Anfänger-Themen 6
F Methodenaufruf Java Basics - Anfänger-Themen 1
F Erste Schritte Label Text vor Methodenaufruf setzen Java Basics - Anfänger-Themen 17
J Array mit Methodenaufruf Java Basics - Anfänger-Themen 2
S Problem bei Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 3
OnDemand Methodenaufruf Java Basics - Anfänger-Themen 3
A Methoden Benutzerdefinierter Methodenaufruf Java Basics - Anfänger-Themen 4
G Methodenaufruf anderer Klasse Java Basics - Anfänger-Themen 18
L Einfacher Methodenaufruf vs. Objekt Java Basics - Anfänger-Themen 4
O Methodenaufruf im Konstruktor Java Basics - Anfänger-Themen 6
G was ist ein Methodenaufruf mit (){}? Java Basics - Anfänger-Themen 6
S Methoden Klassen Definition - Methodenaufruf Java Basics - Anfänger-Themen 7
K Methoden Methodenaufruf für BufferedWriter .. Java Basics - Anfänger-Themen 5
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
A Problem bei Methodenaufruf Java Basics - Anfänger-Themen 6
B Parameterausführung bei Methodenaufruf Java Basics - Anfänger-Themen 8
A Methodenaufruf Java Basics - Anfänger-Themen 4
P Vererbung Methodenaufruf funktioniert aber Wertzuweisung von Variablen nicht Java Basics - Anfänger-Themen 9
S methodenaufruf Java Basics - Anfänger-Themen 8
G Erste Schritte Methodenaufruf, Variablen-Deklaration Java Basics - Anfänger-Themen 6
L Methodenaufruf in main() Java Basics - Anfänger-Themen 3
M Methodenaufruf in for-Schleife - nur 1 mal ausgegeben Java Basics - Anfänger-Themen 3
I Externer Methodenaufruf, Punkt-Notation Java Basics - Anfänger-Themen 11
I Methoden Rückverfolgung Methodenaufruf Java Basics - Anfänger-Themen 15
E Methoden Wie kann ich eine Methode so schreiben, dass Methodenaufruf polymorph erfolgen kann? Java Basics - Anfänger-Themen 8
M Methoden Methodenaufruf mit .class. Java Basics - Anfänger-Themen 2
J rekursiver Methodenaufruf Java Basics - Anfänger-Themen 12
K Klassen this-Referenz und Klassen/Methodenaufruf Syntax Java Basics - Anfänger-Themen 3
T Java mehrfacher Methodenaufruf Java Basics - Anfänger-Themen 15
L Methodenaufruf aus anderer Klasse Java Basics - Anfänger-Themen 5
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
O Methodenaufruf Java Basics - Anfänger-Themen 4
A nullPointerException bei Methodenaufruf Java Basics - Anfänger-Themen 16
J Vererbung, Methodenaufruf Java Basics - Anfänger-Themen 4
M Problem bei Methodenaufruf aus ActionListener Java Basics - Anfänger-Themen 5
G Methodenaufruf aus der Kommandozeile Java Basics - Anfänger-Themen 28
N Methodenaufruf funtioniert nicht Java Basics - Anfänger-Themen 3
C Methodenaufruf mit Variablen die gesetzt werden Java Basics - Anfänger-Themen 10
Antoras mit ActionListener/Methodenaufruf Textfelder zeichnen Java Basics - Anfänger-Themen 4
G Dynamischer Methodenaufruf Java Basics - Anfänger-Themen 3
G Methodenaufruf über ein Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
H ungültige methodenaufruf Java Basics - Anfänger-Themen 16
G Methodenaufruf Java Basics - Anfänger-Themen 3
G Frage zu Oberklasse bei Methodenaufruf Java Basics - Anfänger-Themen 2
V Dynamischer Klassen bzw. Methodenaufruf Java Basics - Anfänger-Themen 6
V Wie und wieso geht dieser Methodenaufruf? Java Basics - Anfänger-Themen 2
S Methodenaufruf Java Basics - Anfänger-Themen 6
G Methodenaufruf in der for-Schleife mit Array Java Basics - Anfänger-Themen 7
L hsqldb Methodenaufruf Java Basics - Anfänger-Themen 10
K synchron und asynchroner Methodenaufruf Java Basics - Anfänger-Themen 17
R Fehler bei Methodenaufruf Java Basics - Anfänger-Themen 2
G Methodenaufruf Java Basics - Anfänger-Themen 3
T NullPointerException bei Methodenaufruf Java Basics - Anfänger-Themen 2
G Methodenaufruf Java Basics - Anfänger-Themen 10
K Klassenübergriefendes Methodenaufruf Problem Java Basics - Anfänger-Themen 6
S methodenaufruf. Java Basics - Anfänger-Themen 16
G methodenaufruf Java Basics - Anfänger-Themen 4
E Methodenaufruf mittels variable? kA Java Basics - Anfänger-Themen 5
G methodenaufruf Java Basics - Anfänger-Themen 3
G methodenaufruf Java Basics - Anfänger-Themen 5
W Überschreiben und Methodenaufruf Java Basics - Anfänger-Themen 3
L Methodenaufruf zwischen Klassen Java Basics - Anfänger-Themen 3
C Methodenaufruf mit throws IOException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben