Methoden Main-Methode erkennt meine Arrays nicht.

C60

Mitglied
Hallo,
ich bin recht neu, wenn es um programmieren geht.
Das Problem:
Ich habe mehrere Methoden geschrieben:
  1. Main Methode
  2. array Methode
  3. array2 Methode
  4. Entscheidungs Methode
  5. Ausgabe Methode
und das Problem ist, dass meine Main-Methode den Array nicht erkennt. Wie kann ich es dazu bringen, dass meine Main-Methode den Array von einer anderen Methode erkennt. Muss ich meine Arrays in die Main-Methode schreiben oder gibt es da auch eine andere Möglichkeit?


Hier der Java-Code:

Java:
public class MainMethodeArray {

    public static void main(String[] args) {
        
        Entscheidung();
        //Hier bei Ausgabe(int [] zahlen) kommt die Fehlermeldung
        Ausgabe(int [] zahlen);
        
    }
    
    public static void array() {
        
        int[] zahlen = {2,3,5,7,9};       
        

    }
    
    public static void array2() {
        
        int[] zahlen = {12,13,15,17,19};
    }
    
    public static void Entscheidung() {
        
        int Entscheidung;
        
        System.out.println("Für welches array möchtest du dich entscheiden? (1-2)");
        Entscheidung = StaticScanner.nextInt();
        
        if(Entscheidung == 1) {
            
        array();
            
        } else if(Entscheidung == 2) {
            
        array2();   
            
        }
        
    }
    
    public static void Ausgabe(int [] zahlen) {
        
        for(int i = 0; i < zahlen.length; i++){
            System.out.println(zahlen[i]);
        }
        
    }
    
    
}
 
Ja, das passt auch alles nicht so zusammen.

Zuerst mal: In Java beginnen die Namen von Methoden und Variablen mit einem Kleinbuchstaben. Klassennamen beginnen mit einem Großbuchstaben und sollten ein Substantiv sein. Methodennamen sollten ein Verb sein oder enthalten, aka "machDiesOderDas".

Du hast eine Methode "Ausgabe", die besser "ausgeben" heißen sollte, mit einem Parameter vom Typ int-Array. Beim Aufruf musst du natürlich ein int-Array angeben und nicht die Methodensignatur wiederholen.

Ich kommentiere mal in den Code hinein:
Java:
public class MainMethodeArray {

    public static void main(String[] args) {
  
        Entscheidung();
        //Hier bei Ausgabe(int [] zahlen) kommt die Fehlermeldung
        Ausgabe(int [] zahlen); // das sollte "Ausgabe(zahlen)" heißen, allerdings ist die Variable "zahlen" in dieser Methode nicht deklariert.
  
    }
 
    public static void array() {
        int[] zahlen = {2,3,5,7,9}; // hier wird eine lokale Variable "zahlen" deklariert und nie mehr verwendet
    } // hier endet die Gültigkeit der oben deklarierten Variablen und sie wird zerstört
 
    public static void array2() {
        int[] zahlen = {12,13,15,17,19}; // hier das selbe wie in der Methode vorher
    }
 
    public static void Entscheidung() {
  
        int Entscheidung; // Variablennamen sollte mit Kleinbuchstaben beginnen
  
        System.out.println("Für welches array möchtest du dich entscheiden? (1-2)");
        Entscheidung = StaticScanner.nextInt(); // Was ist StaticScanner?
  
        if(Entscheidung == 1) {
      
        array(); // hier ruftst du eine Methode auf, allerdings wird das nichts bewirken, außer
            // das in der Methode eine lokale Variable erstellt und wieder zerstört wird.
      
        } else if(Entscheidung == 2) {
      
        array2(); // desgleichen hier
      
        }
  
    }
 
    public static void Ausgabe(int [] zahlen) { 
        for(int i = 0; i < zahlen.length; i++){
            System.out.println(zahlen[i]);
        }
    }
}
 
Zuletzt bearbeitet:
Noch ein Hinweis: Nur, weil die Variablen in deinem Code alle "zahlen" heißen, bedeutet das nicht, dass diese Variable überall gültig ist, bzw es sich immer um die selbe Variable handelt. Tatsächlich sind alle Variablen "zahlen" in deinem Code eigenständige Variablen in ihrem jeweiligen Gültigkeitsbereich, auch, wenn sie zufällig (oder auch nicht) gleich benannt sind.

Innerhalb eines Gültigkeitsbereichs kann es einen Variablennamen nur einmal geben.
Java:
static void doSomething(int par) {
    int par = 2; // geht nicht, weil der Parameter "par" im gleichen Gültigkeitsbereich ist
} // Gültigkeit endet hier

In unterschiedlichen Bereichen geht das sehr wohl:
Java:
class Main {
  
    static void doSomething(int par) { // Deklaration der Parameter-Variablen "par"
        //...
    }
  
    static void doSomethingElse(int anotherPar) {
        int par = 42; // geht, weil es eine lokale Variable der Methode ist
    }
}
 
Zuletzt bearbeitet:
Ja, das passt auch alles nicht so zusammen.

Zuerst mal: In Java beginnen die Namen von Methoden und Variablen mit einem Kleinbuchstaben. Klassennamen beginnen mit einem Großbuchstaben und sollten ein Substantiv sein. Methodennamen sollten ein Verb sein oder enthalten, aka "machDiesOderDas".

Du hast eine Methode "Ausgabe", die besser "ausgeben" heißen sollte, mit einem Parameter vom Typ int-Array. Beim Aufruf musst du natürlich ein int-Array angeben und nicht die Methodensignatur wiederholen.

Ich kommentiere mal in den Code hinein:
Java:
public class MainMethodeArray {

    public static void main(String[] args) {
 
        Entscheidung();
        //Hier bei Ausgabe(int [] zahlen) kommt die Fehlermeldung
        Ausgabe(int [] zahlen); // das sollte "Ausgabe(zahlen)" heißen, allerdings ist die Variable "zahlen" in dieser Methode nicht deklariert.
 
    }
 
    public static void array() {
        int[] zahlen = {2,3,5,7,9}; // hier wird eine lokale Variable "zahlen" deklariert und nie mehr verwendet
    } // hier endet die Gültigkeit der oben deklarierten Variablen und sie wird zerstört
 
    public static void array2() {
        int[] zahlen = {12,13,15,17,19}; // hier das selbe wie in der Methode vorher
    }
 
    public static void Entscheidung() {
 
        int Entscheidung; // Variablennamen sollte mit Kleinbuchstaben beginnen
 
        System.out.println("Für welches array möchtest du dich entscheiden? (1-2)");
        Entscheidung = StaticScanner.nextInt(); // Was ist StaticScanner?
 
        if(Entscheidung == 1) {
     
        array(); // hier ruftst du eine Methode auf, allerdings wird das nichts bewirken, außer
            // das in der Methode eine lokale Variable erstellt und wieder zerstört wird.
     
        } else if(Entscheidung == 2) {
     
        array2(); // desgleichen hier
     
        }
 
    }
 
    public static void Ausgabe(int [] zahlen) {
        for(int i = 0; i < zahlen.length; i++){
            System.out.println(zahlen[i]);
        }
    }
}
Ich habe jetzt meinen Code etwas geändert. Also alle Variablen und Methoden fangen bei mir jetzt mit Kleinbuchstaben an.
Die Methode habe ich jetzt auch "ausgeben" statt "Ausgabe" genannt. Soll ich beim Parameter jetzt: "public static void ausgeben(int zahlen)" eingeben?

Ich nutze den "Entscheidung = StaticScanner.nextInt();" damit der User (Also Ich) einen Int-Wert in die Konsole eintragen kann. Ich weiß nicht wie man es sonst machen sollte. (Also so wurde es mir zumindest gezeigt)

Mein Code sieht jetzt so aus:

Java:
public class MainMethodeArray {

    public static void main(String[] args) {
        
        int [] zahlen;
        
        entscheiden();
        
        ausgeben(zahlen);
        
    }
    
    public static void array() {
        
        int[] zahlen = {2,3,5,7,9};       
        

    }
    
    public static void array2() {
        
        int[] zahlen = {12,13,15,17,19};
    }
    
    public static void entscheiden() {
        
        int entscheidung;
        
        System.out.println("Für welches array möchtest du dich entscheiden? (1-2)");
        entscheidung = StaticScanner.nextInt();
        
        if(entscheidung == 1) {
            
        array();
            
        } else if(entscheidung == 2) {
            
        array2();   
            
        }
        
    }
    
    public static void ausgeben(int zahlen) {
        
        for(int i = 0; i < zahlen.length; i++){
            System.out.println(zahlen[i]);
        }
        
    }
    
    
}
 
Das ändert aber nichts daran, dass Du lokale Variablen hast, die nicht weiter verwendet werden. Schau Dir noch mal die Kommentare von @temi an zu der Methode array.

Was Du z.B. machen könntest: array und array2 geben das Array zurück. Rückgabe ist also nicht void sondern int[].
Und die Rückgabe vom array / array2 Aufruf würde die Methode entscheiden dann auch zurück geben.
Beim Aufruf von entscheiden wäre dann z.B. die Rückgabe in der Variable zahlen zu speichern.
 
Das ändert aber nichts daran, dass Du lokale Variablen hast, die nicht weiter verwendet werden. Schau Dir noch mal die Kommentare von @temi an zu der Methode array.

Was Du z.B. machen könntest: array und array2 geben das Array zurück. Rückgabe ist also nicht void sondern int[].
Und die Rückgabe vom array / array2 Aufruf würde die Methode entscheiden dann auch zurück geben.
Beim Aufruf von entscheiden wäre dann z.B. die Rückgabe in der Variable zahlen zu speichern.
Danke für die Antwort.
Ich habe jetzt für beide Methoden (array & array2) das "Void" mit dem "int[]" ersetzt. Was genau sollte ich dann bei return eintragen? Etwa "entscheiden();" ?
 

Zurück
Oben