2016-09-28 5 views
0

Ich versuche, ein Objekt zu machen, das int in Parametern hat, das den Wert an eine andere Klasse sendet, den Wert des int auf ein privates int in einem Konstruktor einer anderen Klasse setzt und das private int verwendet Setze die Größe eines Arrays, aber ich arbeite nicht ... Weiß jemand warum? Unten ist ein Beispiel dafür, was ich meine, ich auf die Felder Größe festlegen möchten 10.Java-Arrays und Konstruktoren

main class: Car bmw = new Car(10); 

Car class: public Car (int x) 
       { y = x;} 
private int y; 
private String[] carArray= new String[y]; 
+3

die Initialisierung an den Konstruktor verschieben. –

+0

Bitte auch den vollständigen Code und die Fehlermeldung posten. –

Antwort

0

stattdessen das Array im Konstruktor initialisieren

main class: Car bmw = new Car(10); 
      private int y; 
     private String[] carArray=null; 
    Car class: public Car (int x) 
      { y = x; 
      carArray= new String[y]; 
} 
3

Das Problem mit Ihrem Code: private String[] carArray= new String[y]; ausgeführt wird vor der Körper des Konstruktors. In Ihrem Fall wird y immer noch 0 sein (das ist der Standard für primitive Felder), was dazu führt, dass ein Array der Länge 0 erzeugt wird.

So werden Sie es so zu tun haben:

public Car (int x) { 
    y = x; 
    carArray= new String[y]; 
} 

Grundsätzlich ist der Anruf Auftrag ist:

  • Superklasse Initialisierungsblocks/Konstruktor (falls vorhanden)
  • Diese Klasse 'Initialisierungsblock
  • Diese Klasse' Konstruktor

Beispiel: angenommen, wir haben class Car extends Vehicle.

Wenn Sie new Car(10) der Anruf um könnte wie folgt aussehen nennen (vorausgesetzt, es gibt keine Gespräche mit anderen Konstrukteuren:

  • Vehicle Initialisierungsblocks
  • Vehicle Konstruktor
  • Car Initialisierungsblocks
  • Car Erbauer

Ein "Initialisiererblock" besteht aus allem, was im Klassenkörper aber nicht Teil einer Methode ist (es gibt tatsächlich 2 Initialisierungsblöcke: eine statische und eine Instanz, die statische kann durch das Schlüsselwort static identifiziert werden) .

+0

Ow ok ich verstehe jetzt, danke, dass du mir geholfen hast :) –

0

Sie haben die Array in Ihrem Konstruktor zu initialisieren:

public Car (int x) { 
    y = x; 
    carArray= new String[x]; 
}