Mit Java for-Schleife mit ESC beenden

GamEz

New member
Hallo ich wollte bei java eine for-schleife beenden indem man esc drückt ich weis aber nicht wie 🙁

Gruß GamEz
 
Willst du nur die Schleife Beenden oder das gesamte Programm?

Prinzipiell brauchst du da einen ActionListener mit dem du KeyPressed überprüfst und danach ob es sich um die Escape Taste handelt. Wenn du das gesamte Programm beenden willst dann kannst du ja einfach System.exit(0) aufrufen, willst du nur die schlaffe beenden, musst du in der Schleife abfragen ob exc gedrückt wurde (mit Hilfsvariable) und dann eben mit break, oder direkt eine while Schleife machen, was die bessere Methode wäre. ;D
 
ich möchte die schleife beenden.
Das ist das Programm(Sollen wir für die Schule machen 😀)

import java.io.*;

public class Eins {


public static void main(String[] args)throws IOException, InterruptedException{
BufferedReader tastatur = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Hallo dies ist ein Programm mit dem man das kleine 1x1 üben kann.");
System.out.println("Du hast für jede Frage 5 sekunden Zeit, anschließend wirst du benotet!");

Thread.sleep(5000);

int ergebnis = 0,eingabe=0;
int richtig=0,falsch=0;
int note;

for(int i=10;i>0;i--){


double l=(10*Math.random());
int ersteZahl=(int)l;

double k=(10*Math.random());
int zweiteZahl=(int) k;

ergebnis=ersteZahl*zweiteZahl;
System.out.println(ersteZahl+"*"+zweiteZahl+"=");
long systemZeit=System.currentTimeMillis();

eingabe=Integer.parseInt(tastatur.readLine());
long systemZeit2=System.currentTimeMillis();

long zeitDifferenz=systemZeit2-systemZeit;

if(ergebnis==eingabe&&zeitDifferenz<5000){
System.out.println("Richtig 😉");
System.out.println();
richtig+=1;
}
else{
System.out.println("Falsch 🙁");
System.out.println();
falsch+=1;
}


}
switch(richtig){
case 1: note = 6; break;
case 2: note = 5; break;
case 3: note = 5; break;
case 4: note = 5; break;
case 5: note = 4; break;
case 6: note = 4; break;
case 7: note = 3; break;
case 8: note = 2; break;
case 9: note = 1; break;
case 0: note = 6; break;
case 10: note = 1; break;
default : note = 0;
}

System.out.println();
System.out.println("Falsch:"+falsch+"Richtig:"+richtig);
System.out.println();
System.out.println("Deine Note ist "+note);



}

}

Ich möchte die For schleife beenden so das der direkt so der benotung geht und die nicht beanworteten als falsch an sieht

Tut mir leid für die sortierung
 
Mit Escape ist das ganze in der Konsole ziemlich blöd zum lösen, da du da einen ActionListener bräuchtest und ich denke nicht das ihr das Thema schon behandelt habt in der Schule.

Einfach wäre es wenn etwa die Eingabe "0" oder einfach keine Zahl die Abbruchbedingung wäre, weil dann kannst du das ganz einfach nach jeder Eingabe überprüfen und dann gegebenenfalls die Schleife mit break beenden und halt die Differenz von "i" zu "0" als falsch zählen.
 
ich bin noch nicht so gut ^^ habe erst seit anfang der schuljahres informatik heist august ^^
ich wollte das mit if machen wie geht das dann?

if(tastatur.read(0)){
break;
}

ich hatte so gedacht aber es geht nicht kannst du mir helfen wo ich das setzen muss und wie?
 
Also jedes mal wenn du einliest vergleichst du den Wert, also nachdem du eingelesen hast machst du eine if-Abfrage.

Code:
if(eingabe==0){
      falsch +=10-i; //Rest als Falsch zählen
      break;
}
 
ok vielen dank
klappt so medium


Hallo dies ist ein Programm mit dem man das kleine 1x1 üben kann.
Du hast für jede Frage 5 sekunden Zeit, anschließend wirst du benotet!
Du kannst dieses Programm abbrechen indem du als Ergebnis einfach eine Null eintippst
1*6=
2
Falsch 🙁

5*5=
2
Falsch 🙁

6*4=
0

Falsch:4Richtig:0

Deine Note ist 6

das sagt die konsole
und das ist mein programm

import java.io.*;

public class Eins {


public static void main(String[] args)throws IOException, InterruptedException{
BufferedReader tastatur = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Hallo dies ist ein Programm mit dem man das kleine 1x1 üben kann.");
System.out.println("Du hast für jede Frage 5 sekunden Zeit, anschließend wirst du benotet!");
System.out.println("Du kannst dieses Programm abbrechen indem du als Ergebnis einfach eine Null eintippst ");
Thread.sleep(5000);

int ergebnis = 0,eingabe=0;
int richtig=0,falsch=0;
int note;

for(int i=10;i>0;i--){

double l=(9*Math.random());
int ersteZahl=(int) l;

double k=(9*Math.random());
int zweiteZahl=(int) k;

zweiteZahl++;
ersteZahl++;

ergebnis=ersteZahl*zweiteZahl;
System.out.println(ersteZahl+"*"+zweiteZahl+"=");
long systemZeit=System.currentTimeMillis();

eingabe=Integer.parseInt(tastatur.readLine());
long systemZeit2=System.currentTimeMillis();

long zeitDifferenz=systemZeit2-systemZeit;

if(eingabe==0){
falsch +=10-i;
break;
}

if(ergebnis==eingabe&&zeitDifferenz<5000){
System.out.println("Richtig 😉");
System.out.println();
richtig+=1;
}
else{
System.out.println("Falsch 🙁");
System.out.println();
falsch+=1;
}


}
switch(richtig){
case 1: note = 6; break;
case 2: note = 5; break;
case 3: note = 5; break;
case 4: note = 5; break;
case 5: note = 4; break;
case 6: note = 4; break;
case 7: note = 3; break;
case 8: note = 2; break;
case 9: note = 1; break;
case 0: note = 6; break;
case 10: note = 1; break;
default : note = 0;
}

System.out.println();
System.out.println("Falsch:"+falsch+"Richtig:"+richtig);
System.out.println();
System.out.println("Deine Note ist "+note);



}

}
 
Zuletzt bearbeitet:
Code:
double l=(9*Math.random());
int ersteZahl=(int) l;

double k=(9*Math.random());
int zweiteZahl=(int) k;

zweiteZahl++;
ersteZahl++;

Mach das besser so, ist einfacher und übersichtlicher. (Kann sein das du casten musst, denke aber nicht)

Code:
int ersteZahl = 9*Math.random()+1;
int zweiteZahl = 9*Math.random()+1;

Der Fehler liegt in der if-Abfrage wo Du die restlichen als Falsch wertest.
Hab nicht gesehen, dass deine for-Schleife von 10 bis 0 zählt, da das etwas unüblich ist.
So müsste es funktionieren:
Code:
if(eingabe==0){
    falsch +=i; 
    break;
}

Müsste so eigentlich funktionieren, bis auf dass der Code nicht sehr schön geschrieben ist und man einiges eigentlich anderes machen sollte, aber für den Anfang ist das schon mal okay. :-D
 
Vielen vielen dank 😀

Noch eine frage ^^
kannst ich so das programm durch eine eingabe wiederholen-nein es klappt nicht ^^
es kommt nur auf die do-while schleife an

import java.io.*;

public class Eins {


public static void main(String[] args)throws IOException, InterruptedException{
BufferedReader tastatur = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Hallo dies ist ein Programm mit dem man das kleine 1x1 üben kann.");
System.out.println("Du hast für jede Frage 2 sekunden Zeit, anschließend wirst du benotet!");
System.out.println("Du kannst dieses Programm abbrechen indem du als Ergebnis einfach eine Null eintippst ");
System.out.println("Gib ja ein um das Programm zu wiederholen");
System.out.println();
Thread.sleep(5000);

int ergebnis = 0;
int eingabe=0;
int richtig=0,falsch=0;
int note;
String Eingabe="";

do{

for(int i=10;i>0;i--){

Thread.sleep(2000);

double l=(9*Math.random());
int ersteZahl=(int) l;

double k=(9*Math.random());
int zweiteZahl=(int) k;

zweiteZahl++;
ersteZahl++;

ergebnis= ersteZahl*zweiteZahl;
System.out.println(ersteZahl+"*"+zweiteZahl+"=");
long systemZeit=System.currentTimeMillis();

eingabe=Integer.parseInt(tastatur.readLine());
long systemZeit2=System.currentTimeMillis();

long zeitDifferenz=systemZeit2-systemZeit;


if(eingabe==0){
falsch +=i;
break;
}

if(ergebnis==eingabe&&zeitDifferenz<5000){
System.out.println("Richtig 😉");
System.out.println();
richtig+=1;
}
else{
System.out.println("Falsch 🙁");
System.out.println();
falsch+=1;
}


}
switch(richtig){
case 1: note = 6; break;
case 2: note = 5; break;
case 3: note = 5; break;
case 4: note = 5; break;
case 5: note = 4; break;
case 6: note = 4; break;
case 7: note = 3; break;
case 8: note = 2; break;
case 9: note = 1; break;
case 0: note = 6; break;
case 10: note = 1; break;
default : note = 0;
}

System.out.println();
System.out.println("Falsch:"+falsch+"Richtig:"+richtig);
System.out.println();
System.out.println("Deine Note ist "+note);
System.out.println();
System.out.println("Möchtest du wiederholen?");
Eingabe=tastatur.readLine();

}while(Eingabe=="ja");
}
}
 
Zuletzt bearbeitet:
Probiere es mal mit:
Code:
while(Eingabe.equals("ja"));
while(Eingabe.equalsIgnoareCase("ja")); //ignoriert Groß- und Kleinschreibung
 

Online-Statistiken

Zurzeit aktive Mitglieder
0
Zurzeit aktive Gäste
46
Besucher gesamt
46

Beliebte Forum-Themen

Zurück
Oben Unten