[Java] Problem mit Array *Erledigt*

topfklao

Christoph N.
ID: 118468
L
20 April 2006
885
17
Hi!
Ich habe leider folgendes Problem :(


Ich habe eine Klasse Test und darin folgenden Konstruktor(=Eine Methode):

Test(){
int test [] = {1,2,3,4};
}


Darin initialisiere ich den Array Test.
Denn möchte ich nun in der gleichen Klasse aufrufen:

int testaus (int nr){
System.out.print(test[1]);
return nr;
}


Nun kommt es aber leider zu folgender Fehlermeldung:
"Cannot find symbol"
 
Zuletzt bearbeitet:
Das Array ist im Konstruktor nur lokal, d.h. keine andere Methode kommt da ran.
Wenn das Array in der Klasse überall verfügbar sein muss, dann muss du es auch in der Klasse selber definieren.

PHP:
public class Foo
{
  private int[] bar = {1, 2, 3, 4};

  /* ... */
}
 
Mhhh.. Ok..


Jetzt hab ichs mal folgendermaßen gemacht:


PHP:
class Test {

//Attribut:
    int [] test;


    Test(int an){    
   int [] test = new int [an];
    }




int testaus (int nr){
System.out.print("test" + test[1]);
return nr;
}


}
Aufrufen würd ich das ganze dann in der Mainklasse mit an == 4 .
Hier kommt es aber zur Fehlermeldung :
Exception in thread "main" java.lang.NullPointerException

Wenn ich das System.out..... "rausnehme" ist wieder alles ok.. :~) Aber das will ich ja nicht :p
 
Hi,

folgender Code wre richtiger:

Code:
public class Test{
 private int test[];

 public Test(){
  this.test[] = {1,2,3,4};

 public int testaus (int nr){
  System.out.print(this.test[nr]);
  return nr;
 }
}

Grüße,
Sebastian
 
Also der Code von oben führt leider auch zu ner Fehlermeldung!
Jedoch wäre es viel wichtiger für mich, wenn mein obiges Beispiel funktionieren würde:

Mit "an" möchte ich dort die Größe des Arrays angeben...

Und was bedeutet die Fehlermeldung von oben? ( Exception in thread "main" java.lang.NullPointerException)
 
Du möchtest die Arraygröße mit dem Konstruktor regeln ?
PHP:
public class Foo {

    private int[] values;

    public Foo(int arraySize) {
        this.values = new int[arraySize];
    }

    public int testAus(int nr) {
        System.out.print(this.values[nr]);
        return nr;
    }

    public static void main(String... args) {
        Foo foo = new Foo(5);
        int x1 = foo.testAus(4); // ok
        try {
            int x2 = foo.testAus(42); // wirft ArrayIndexOutOfBoundsException
        } catch(Exception e) {
            System.out.print("caught Exception " + e);
        }
    }
}
Müsste in etwa stimmen - hab schon länger kein Java mehr geschrieben :biggrin:
 
sicher, dass nen vararg (String... args) für die main-Methode funzt? Ich bin der Meinung da geht nur das String-Array (String[] args).
Es seidenn es wurde in Java5 mit der Einführung der Varargs noch die Möglickeit des Parameters der main-Methode geändert
 
Also der Code von oben führt leider auch zu ner Fehlermeldung!
Jedoch wäre es viel wichtiger für mich, wenn mein obiges Beispiel funktionieren würde:

Mit "an" möchte ich dort die Größe des Arrays angeben...

Und was bedeutet die Fehlermeldung von oben? ( Exception in thread "main" java.lang.NullPointerException)

um einfach mal auf deine Frage zu antworten: eine NullPointerException wird dann geworfen, wenn der Pointer den du benutzt (in dem Fall test[1], ist nichts anderes als ein Pointer auf ein Datenfeld) ins Nirvana zeigt. Passiert häufig wenn arrays nicht anständig definiert sind, und man über die Grenzen drüberschreibt.

Soll heißen du hast einfach (afaik) in deinem Konstruktor noch immer eine lokale Variable angelegt, und der globale Array hat immer noch keine Grenzen - versuch mal, in der Zeile "int [] test = new int [an];" das "int[] " wegzulassen. Oder nimm einfach Hackerchens Code..