OOP While Schleifen Fehler

Kirby.exe

Top Contributor
Ich hatte folgendes mini "Spiel" geschrieben, jedoch gibt er auf der Console trotz der Beendung der While Schleife weiteren Output. Ich bin wahrscheinlich einfach zu müde oder einfach nur blind, aber ich probiere jetzt schon ewig rum und es wird einfach nicht besser :( Danke im voraus für eure Hilfe :)
Java:
import java.util.Scanner;

public class Spiel {
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int Obergrenze = 0;
        int Eingabe1 = 1;
        int Eingabe2 = 1;
        int Speicher1 = 0;
        int Speicher2 = 0;
        
        System.out.println("Grenze:");
        Obergrenze = sc.nextInt();
        
        while (Obergrenze < 8) {

                    System.out.println("Grenze:");
                    Obergrenze = sc.nextInt();
  
        }
 
    
        while (Eingabe1 != 0 || Eingabe2 != 0 ||Speicher1 < Obergrenze || Speicher2 < Obergrenze) {
        
        /*if (Speicher1 > Obergrenze) {
            System.out.println("Spieler 1 hat verloren, da seine eingegeben Zahlen addiert " + Speicher1 + " ergeben und somit seine Obergrenze " + Obergrenze + " überschreiten!");
        }
        
        if (Speicher2 > Obergrenze) {
            System.out.println("Spieler 2 hat verloren, da seine eingegeben Zahlen addiert " + Speicher2 + " ergeben und somit seine Obergrenze " + Obergrenze + " überschreiten!");
        }*/
        
        System.out.println("Spieler 1:");
        Eingabe1 = sc.nextInt();
        
        while (Eingabe1 > 3 || Eingabe1 < 1) {
            
            System.out.println("Deine Zahl muss zwischen 1 und 3 liegen, deine Eingabe war falsch!");
            System.out.println("Spieler 1:");
            Eingabe1 = sc.nextInt();
            
        }
        
        Speicher1 = Eingabe1 + Speicher1;
        if (Speicher1 > Obergrenze) {
            System.out.println("Spieler 1 hat verloren, da seine eingegeben Zahlen addiert " + Speicher1 + " ergeben und somit seine Obergrenze " + Obergrenze +" überschreiten!");
        }
        
        
        System.out.println("Spieler 2:");
        Eingabe2 = sc.nextInt();
        
        while (Eingabe2 > 3 || Eingabe2 < 1) {
            
            System.out.println("Deine Zahl muss zwischen 1 und 3 liegen, deine Eingabe war falsch!");
            System.out.println("Spieler 2:");
            Eingabe2 = sc.nextInt();
            
        }
        
        Speicher2 = Eingabe2 + Speicher2;
        if (Speicher2 > Obergrenze) {
            System.out.println("Spieler 2 hat verloren, da seine eingegeben Zahlen addiert " + Speicher2 + " ergeben und somit seine Obergrenze " + Obergrenze +" überschreiten!");
        }
        
        
    }
    
    sc.close();
    
        
    }
}
 

Kirby.exe

Top Contributor
Kleiner Edit: Hier mit funktioniert das Programm jedoch in dieser dummen Java Umgebung in der man die Lösungen einsenden muss funktioniert es nicht :( in Eclipse komischerweise schon

Java:
import java.util.Scanner;

public class Spiele {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int Obergrenze = 0;
        int Eingabe1 = 1;
        int Eingabe2 = 1;
        int Speicher1 = 0;
        int Speicher2 = 0;
        
        System.out.println("Grenze:");
        Obergrenze = sc.nextInt();
        
        while (Obergrenze < 8) {

                    System.out.println("Grenze:");
                    Obergrenze = sc.nextInt();
  
        }
 
    
        while (Eingabe1 != 0 && Eingabe2 != 0 && Speicher1 < Obergrenze && Speicher2 < Obergrenze) {
        
        
        
        System.out.println("Spieler 1:");
        Eingabe1 = sc.nextInt();
        
        while (Eingabe1 > 3 && Eingabe1 < 1) {
            
            System.out.println("Deine Zahl muss zwischen 1 und 3 liegen, deine Eingabe war falsch!");
            System.out.println("Spieler 1:");
            Eingabe1 = sc.nextInt();
            
        }
        
        
        System.out.println("Spieler 2:");
        Eingabe2 = sc.nextInt();
        
        while (Eingabe2 > 3 && Eingabe2 < 1) {
            
            System.out.println("Deine Zahl muss zwischen 1 und 3 liegen, deine Eingabe war falsch!");
            System.out.println("Spieler 2:");
            Eingabe2 = sc.nextInt();
            
        }
        
        Speicher1 = Eingabe1 + Speicher1;
        Speicher2 = Eingabe2 + Speicher2;
        
    }
    
    if (Speicher1 > Obergrenze) {
        System.out.println("Spieler 1 hat verloren, da seine eingegeben Zahlen addiert " + Speicher1 + " ergeben und somit seine Obergrenze " + Obergrenze + " überschreiten!");
        sc.close();
    }
    
    if (Speicher2 > Obergrenze) {
        System.out.println("Spieler 2 hat verloren, da seine eingegeben Zahlen addiert " + Speicher2 + " ergeben und somit seine Obergrenze " + Obergrenze + " überschreiten!");
        sc.close();
    }
 
    
        
    }
}
 

Meniskusschaden

Top Contributor
jedoch in dieser dummen Java Umgebung in der man die Lösungen einsenden muss funktioniert es nicht
Diese Umgebung gibt doch bestimmt auch ein paar Informationen aus. Mit "funktioniert nicht" kann man nicht viel anfangen.

in Eclipse komischerweise schon
Na ja, zumindest die Prüfung, ob die Eingabe zwischen 1 und 3 liegt, funktioniert nicht. Es wird wohl noch mehr Fehler geben, denn so wie es jetzt läuft, ergibt das Spiel wenig Sinn. Man achtet darauf, die Grenze nur zu erreichen, aber nicht zu überschreiten. Sobald ein Spieler sie erreicht hat, ist das Spiel beendet. Man kann eigentlich nur mutwillig verlieren. Ohne die Aufgabenstellung zu kennen, kann man dazu aber nicht allzu viel sagen.
 

vorn6658

Mitglied
Wie soll das Spiel denn funktionieren?

Ich zähle viermal while aber fast keine if's...

int Obergrenze = 0; int Eingabe1 = 1; int Eingabe2 = 1; int Speicher1 = 0; int Speicher2 = 0;
mit einem Kleinbuchstaben anfangen.

Scanner brauchst nicht schließen.

public static void main(String[] args) {
Es ist darüber nachzudenken, Methoden oder Funktionen zu verwenden...

Java Umgebung in der man die Lösungen einsenden muss funktioniert es nicht
Bekamt ihr keine Angaben oder Hinweise?
 

Kirby.exe

Top Contributor
Naja also ich hatte in dem Programm geschaut, woran es liegen könnte, aber es gibt kein Error_Log oder richtige Error Meldungen...Es steht dann so etwas wie Programm Timeout :( In wie fern muss ich die Überprüfung bei 1 und 3 ändern, dass es funktioniert, oder eher gesagt: was mache ich falsch, damit ich meine Fehler nachvollziehen kann und daraus lerne :)
 

Kirby.exe

Top Contributor
Wie soll das Spiel denn funktionieren?

Ich zähle viermal while aber fast keine if's...


mit einem Kleinbuchstaben anfangen.


Scanner brauchst nicht schließen.


Es ist darüber nachzudenken, Methoden oder Funktionen zu verwenden...


Bekamt ihr keine Angaben oder Hinweise?
Ich kann ja mal die Aufgabenstellung screenshotten, hatte mir das halt so ungefähr überlegt

Die Umgebung in der man abgeben muss heißt übrigens YAPEX
 

Anhänge

  • Bildschirmfoto 2019-11-05 um 08.45.27.png
    Bildschirmfoto 2019-11-05 um 08.45.27.png
    192,5 KB · Aufrufe: 20
Zuletzt bearbeitet:

M.L.

Top Contributor
:( in Eclipse komischerweise schon
Es soll ja laufen (auch in IntelliJ), aber in der editierten Version finden sich noch ein paar andere Ungereimtheiten:
Java:
        int Obergrenze = 0;
        (..)
        while (Obergrenze < 8) {
//zumindest reagiert das Programm nicht auf eine Eingabe >= 8
    (..)                
        while (Eingabe1 > 3 && Eingabe1 < 1) {
// nie erfüllt, es sei denn man verwendet ||          
            
        while (Eingabe2 > 3 && Eingabe2 < 1) {
//selbes Problem          
            
}
Ausserdem könnte ein Spieler die Grenze zuerst überschreiten (allerdings wird die Meldung hierzu zu spät ausgegeben und der andere Spieler wird ebenfalls kontrolliert)
 

Kirby.exe

Top Contributor
Ok ich hatte dass auch kurz zeitig so, jedoch war ich mir nicht ganz sicher ob das richtig war deswegen habe ich es wieder zurück zu UND geändert :)

Gibt es eine Möglichkeit das auszuschließen? Also wenn Spieler1 verliert sofort die Schleife abgebrochen wird und nicht noch die Eingabe von Spieler 2 eingelesen wird?
 

M.L.

Top Contributor
Gibt es eine Möglichkeit das auszuschließen? Also wenn Spieler1 verliert sofort die Schleife abgebrochen wird und nicht noch die Eingabe von Spieler 2 eingelesen wird?
Dazu verändert man die Klammerung (ändert nichts am Problem mit der Obergrenze):
Code:
 (..) 
Speicher2 = Eingabe2 + Speicher2;
//}
        if (Speicher1 > Obergrenze) {
            System.out.println("Spieler 1 hat verloren, da seine eingegeben Zahlen addiert " + Speicher1 + " ergeben und somit seine Obergrenze " + Obergrenze + " überschreiten!");
            //sc.close();
            }
            //Speicher2 = Eingabe2 + Speicher2;
            if (Speicher2 > Obergrenze) {
                System.out.println("Spieler 2 hat verloren, da seine eingegeben Zahlen addiert " + Speicher2 + " ergeben und somit seine Obergrenze " + Obergrenze + " überschreiten!");
              //  sc.close();
            }
        }
    }


}
Test mit 2,3 in der Konsole: "
Spieler 2:
3
Spieler 1:
2
Spieler 2:
3
Spieler 2 hat verloren, da seine eingegeben Zahlen addiert 12 ergeben und somit seine Obergrenze 10 überschreiten!

Process finished with exit code 0"
 

Kirby.exe

Top Contributor
Sooo ich habe mein Programm nochmal überarbeitet und jetzt müsste eigentlich alles funktionieren. Es gibt nur noch ein Problem, das IDE der Uni möchte meinen Code nicht so ausführen wie Eclipse. Kann es sein dass das IDE eine ältere Version von Java verwendet und wenn ja, was könnte oder eher gesagt müsste man ändern um diese Probleme aus der Welt zu schaffen?

Code:
import java.util.Scanner;

public class Spiel {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int obergrenze = 0;
        int eingabe1 = 1;
        int eingabe2 = 1;
        int speicher1 = 0;
        int speicher2 = 0;
        
        System.out.println("Grenze:");
        obergrenze = sc.nextInt();
        
        while (obergrenze < 8) {

                    System.out.println("Grenze:");
                    obergrenze = sc.nextInt();
  
        }
 
    
        while (eingabe1 != 0 && eingabe2 != 0 && speicher1 < obergrenze && speicher2 < obergrenze) {
        
        
        
            System.out.println("Spieler 1:");
            eingabe1 = sc.nextInt();
            
            while (eingabe1 > 3 || eingabe1 < 1) {
                
                System.out.println("Deine Zahl muss zwischen 1 und 3 liegen, deine Eingabe war falsch!");
                System.out.println("Spieler 1:");
                eingabe1 = sc.nextInt();
                
            }
            
            speicher1 = eingabe1 + speicher1;
            
            if (speicher1 >= obergrenze) {
                System.out.println("Spieler 1 hat verloren, da seine eingegeben Zahlen addiert " + speicher1 + " ergeben und somit seine Obergrenze " + obergrenze + " erreicht!");
                sc.close();
                break;
            }
            
            
            System.out.println("Spieler 2:");
            eingabe2 = sc.nextInt();
            
            while (eingabe2 > 3 || eingabe2 < 1) {
                
                System.out.println("Deine Zahl muss zwischen 1 und 3 liegen, deine Eingabe war falsch!");
                System.out.println("Spieler 2:");
                eingabe2 = sc.nextInt();
                
            }
        
            speicher2 = eingabe2 + speicher2;
            
            if(speicher2 >= obergrenze) {
                System.out.println("Spieler 2 hat verloren, da seine eingegeben Zahlen addiert " + speicher2 + " ergeben und somit die Obergrenze " + obergrenze + " erreicht!");
                sc.close();
                break;
            }
        
        }
    
            
    }
}
 

Kirby.exe

Top Contributor
Das ist alles was das Programm ausgibt und scheinbar bricht er die Schleife nicht so ab wie er soll :(
 

Anhänge

  • Bildschirmfoto 2019-11-05 um 14.17.43.png
    Bildschirmfoto 2019-11-05 um 14.17.43.png
    121,6 KB · Aufrufe: 48

mrBrown

Super-Moderator
Mitarbeiter
Die "IDE" (eher Testumgebung) kann dein Programm schon ausführen, nur macht dein Programm nicht das, was in der Aufgabenstellung gefordert ist :)

Bei dir zählen beide Spieler getrennt voneinander hoch, laut Aufgabe werden ihr Eingaben aber zusammen gerechnet (und die Obergrenze muss laut Aufgabe überschritten werden).
 

Kirby.exe

Top Contributor
Okee dann schreibe ich es mal eben um und schaue dann ob es geht :) Die einzige frage die ich mir dann stelle ist, wie ich angebe welcher Spieler verloren hat
 

Neue Themen


Oben