Warum kann man keine Parameter in die main-Methode packen?

Hallo1234

Bekanntes Mitglied
Hallo,
hier kommt ein etwas längerer Code. Ich weiß einfach nicht, wie ich das mit der Parameterübergabe machen soll. Die beiden in der main-Methode angegebenen Parameter werden von der ermittleLosnummer Methode benötigt. So wie ich es gemacht habe, funktioniert es nicht. Wie könnte es sonst klappen?

Java:
import java.util.Scanner;
public class Lotto {

    public static void main(String[] args, int superZahl, int[] lottoZahlen) {
        Scanner s = new Scanner(System.in);
        
        System.out.println("Geben Sie bitte Ihre Tipps ein: ");
        
        int[] tipps = new int[7];
        
        for(int j = 0; j<tipps.length; j++) {
            
            System.out.print("Tipp "+(j+1)+" :");
            tipps[j] = s.nextInt();
        
        boolean pruefWert = istDoppelt(tipps, j);
        if(pruefWert == true) {
            System.out.println("Es dürfen keine Doppelgänger vorkommen. Bitte erneut eingeben.");
            j = j-1;
        }
            
        if(tipps[j]<=0 || tipps[j]>49) {
            System.out.println("Bitte noch einmal eingeben. Der Tipp war ungültig: ");
            j = j-1;
        }
    }
        superZahl();
        
        int uebersicht = gibTippuebersichtAus(tipps);
        
        minMaxWerte(tipps);
        
        ermittleLosnummer(tipps, superZahl, lottoZahlen);
        
        zieheLottozahlen();
        
    
        
}

    public static int superZahl() {
        Scanner s = new Scanner(System.in);
        System.out.println("Gib deine Superzahl ein: ");
        int superZahl = s.nextInt();
        return superZahl;
    }
    
    public static boolean istDoppelt(int[] tipps, int durchlaeufe) {
        boolean pruefWert = false;
        for(int i = 0; i<durchlaeufe; i++) {
        if(tipps[i] == tipps[durchlaeufe]) {
            pruefWert = true;
            }
        }
        return pruefWert;
    }
    
    public static int[] ermittleLosnummer(int[] tipps, int superZahl, int[] lottoZahlen) {
    
        int[] losnummer = new int[7];
        for(int i = 0; i<losnummer.length; i++) {
            losnummer[i] = ermittleZufallszahl(0,9);
        }
        gibLottoZahlenAus(lottoZahlen);
        
        superZahl();
        
        ermittleTippergebnis(losnummer,tipps, superZahl, lottoZahlen);
        
        return losnummer;
    }
    
    public static int ermittleZufallszahl(int low, int high){
        int zufallszahl = (int) (Math.random() * (high - low + 1)) + low;
        return zufallszahl;
}
    
    public static int gibTippuebersichtAus(int[] tipps) {
        int uebersicht = 0;
        System.out.print("Das sind deine Tipps: ");
        for(int k = 0; k<tipps.length; k++) {
            System.out.print(tipps[k]+ " ");
            
        }
        return uebersicht;
    }
    
    public static void minMaxWerte(int[] tipps) {
        //leer
    }
    
    public static int[] zieheLottozahlen() {
        int[] lottoZahlen = new int[7];
        
        for(int i = 0; i<lottoZahlen.length; i++) {
            
            if(i< lottoZahlen.length-1) {
                lottoZahlen[i] = ermittleZufallszahl(1,49);
        
            }else {
                lottoZahlen[i] = ermittleZufallszahl(0,9);
                }
            }
        gibLottoZahlenAus(lottoZahlen);
        return lottoZahlen;
        }
    
    
    public static void gibLottoZahlenAus(int[] lottoZahlen) {
        System.out.println("\nDie Lottozahlen sind: ");
        
        for(int i = 0; i<(lottoZahlen.length-1); i++) {
            if(i == 0) {
                System.out.print(lottoZahlen[i]);
            }else {
                System.out.print(" "+ lottoZahlen[i]);
            }
        }
        System.out.println();System.out.println("Superzahl: "+lottoZahlen[lottoZahlen.length-1]);
    }
    
    public static int ermittleTippergebnis(int[] losnummer, int[] tipps, int superZahl, int[] lottoZahlen) {
        
        int gewinnklasse = 0;
        if(losnummer[6]==tipps[6]&&superZahl==ermittleZufallszahl(0,9)) {
            gewinnklasse = 1;
        }else if(losnummer[6]==tipps[6]&&superZahl!=ermittleZufallszahl(0,9)) {
            gewinnklasse = 2;
        }else if(losnummer[5]==tipps[5]&&superZahl==ermittleZufallszahl(0,9)) {
            gewinnklasse = 3;
        }else if(losnummer[5]==tipps[5]&&superZahl!=ermittleZufallszahl(0,9)) {
            gewinnklasse = 4;
        }else if(losnummer[4]==tipps[4]&&superZahl==ermittleZufallszahl(0,9)) {
            gewinnklasse = 5;
        }else if(losnummer[4]==tipps[4]&&superZahl!=ermittleZufallszahl(0,9)) {
            gewinnklasse = 6;
        }else if(losnummer[3]==tipps[3]&&superZahl==ermittleZufallszahl(0,9)) {
            gewinnklasse = 7;
        }else if(losnummer[3]==tipps[3]&&superZahl!=ermittleZufallszahl(0,9)) {
            gewinnklasse = 8;
        }else if(losnummer[2]==tipps[2]&&superZahl==ermittleZufallszahl(0,9)) {
            gewinnklasse = 9;
        }
        
        gibGewinnAus(lottoZahlen, gewinnklasse);
        
        return gewinnklasse;
    }
    
    public static void gibGewinnAus(int[] lottoZahlen, int gewinnklasse) {
        System.out.println("Die Zahlen der Ziehung waren: ");
        
        for(int i = 0; i<(lottoZahlen.length-1); i++) {
            if(i == 0) {
                System.out.print(lottoZahlen[i]);
            }else {
                System.out.print(" "+ lottoZahlen[i]);
            }
        }
        System.out.println();System.out.println("Die Superzahl war: "+lottoZahlen[lottoZahlen.length-1]);
        
        System.out.println("Folgenden Gewinn haben Sie erzielt: ");
        switch(gewinnklasse) {
        case 1:
            System.out.println("Superzahl und 6 richtige, Jackpot!");
        break;
        case 2:
            System.out.println("6 richtige.");
        break;
        case 3:
            System.out.println("Superzahl und 5 richtige.");
        break;
        case 4:
            System.out.println("5 richtige.");
        break;
        case 5:
            System.out.println("Superzahl und 4 richtige.");
        break;
        case 6:
            System.out.println("4 richtige");
        break;
        case 7:
            System.out.println("Superzahl und 3 richtige.");
        break;
        case 8:
            System.out.println("3 richtige.");
        break;
        case 9:
            System.out.println("Superzahl und 2 richtige.");
        break;
        
        }
    }
}

Vielen Dank 🙂
 
"main" muss die Signatur "main(String[])" haben damit die JVM diese ausfuehren kann. Es macht auch keinen Sinn dort andere Parameter zu haben, weil die von nirgendwo kommen koennen. Die JVM weisz ganz bestimmt nicht welche Parameter sie an dieser Stelle uebergeben muss.

Wenn die Parameter aus den Kommandozeilenparametern kommen sollen, dann musst du diese angeben beim starten und "args" auswerten.

Aber wenn ich so deinen Code lese, hast du die Sache einfach nur misverstanden. Schau mal, "superzahl()" liefert einen "int", naemlich genau den Wert den du suchst. Nur wird der im Moment nirgendwo gespeichert, weil du die Funktion aufrufst ohne das Ergebnis zuzuweisen.
 
Ich muss hier was ergänzen: natürlich kannst Du eine Methode mit dem Namen main und den gewünschten Parametern implementieren. Nur ist das eben nicht die Methode, die von der JVM aufgerufen wird 🙂

Java:
public class Lotto {

    public static void main(String[] args, int superZahl, int[] lottoZahlen) {
         // ...
    }

    // die von der JVM aufgerufene main-Methode:
    public static void main(String[] args) {
        Lotto.main(args, 6, new int[]{1, 2, 3, 4, 5, 6});
    }
}

Ansonsten gilt alles, was @Robert Zenz schon geschrieben hat.
 

Neue Themen


Zurück
Oben