Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe einen Programmcode geschrieben (vgl. Schaltjahrrechner) und möchte am Ende dieser Berechnung eine Auswahlmöglichkeit haben ob ich die Berechnung mit einer anderen Zahl erneut ausführen möchte oder ob ich das Programm beenden möchte.
Jedoch habe ich for schleifen bisher nur programmiert für Zahlenwerte, möchte aber jetzt einen
Eingabe nach dem Motto"wollen sie eine erneute Berechnung starten?" und dann J oder N eingeben für die Neugeberechnung oder das Beenden des Programms.
wofür steht das "Y"?
gehe von aus, dass es für JA (engl. "Yes") steht, als ene wiederholung des programms???!!?
Also:
Java:
package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
public static void main(String[] args) {
Scanner keyboard=new Scanner(System.in);
int Jahr;
while (eingabe.euqals ("y")) {
System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
String line=keyboard.nextLine();
if ((line.length() < 4) || (line.length()>4)) {System.out.print("Das Jahr " + line + " kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.");
System.out.println("The year "+line+ " is not computable. The number has to have four digits." );
}
else{Jahr=Integer.parseInt(line);
if (Jahr==0000) {System.out.println("Das Jahr 0000 ist ein Schaltjahr");
System.out.println("The year 0000 is a leap-year.");
}
else if(Jahr<0) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums.");
System.out.println("The number is not computable.");
}
else if (Jahr>=2101) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums. ");
System.out.println("The number is not computalbe.");
}
else if (Jahr % 100 == 0) {System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " + line + " is not a leap-year.");
}
else if ((Jahr % 400 == 0)) {System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year " + line + " is a leap-year.");
}
else if (Jahr % 4==0) {System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year "+line+" is a leap-year.");
}
else if((Jahr % 4 != 0) && (Jahr % 400 != 0)) {System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " +line+ " is not a leap-year.");
System.out.println("Wollen Sie eine neue Berechnung starten?" "Y/N");
eingabe=Scanner.nextInt();
}}}}}
Variablen werden in lowerCamelCase geschrieben: also "jahr" statt "Jahr"
Und du vergleichst in deiner while-Schleife einen String mit "y", bei der Zuweisung zu Eingabe liest du von der Console aber ein int ein.
Java:
eingabe = Scanner.nextInt();
Das passt nicht ganz zusammen.
Kleiner Tipp - folgende if-Abfrage lässt sich vereinfachen
Java:
if ((line.length() < 4) || (line.length() > 4)) {
// wird zu
if (line.length() != 4) {
Du musst eine lokale Variable "eingabe" vor der Schleife deklarieren und initialisieren
Und warum willst du nextLine() so aufrufen? Wie liest du denn die Zahl ein? Da verwendest du doch auch keyboard
Du musst eingabe halt schon vorher deklarieren...
Ansonsten musst du scanner durch deinen passenden Namen ersetzen.
Allgmein würde ich auch eher eine do-while nutzen. while geht zwar auch, aber do-while ist hier etwas passender:
Hier wir immer die Eingabe eine Jahreszahl erwartet, d.h. also, solange Zahlen eingeben werden und die valide sind, soll neu berechnet werden. Der Abbruch ist dann z.B. definiert als nicht valide Eingabe, oder durch Eingabe von exit, quit oder was auch immer.
Also eine Endlossschleife while(true) und in der Schleife nimmst du die Eingabe entgehen und validierst.
Am einfachsten erstmal mit trim() die Leerzeichen eliminieren und auf Länge 4 testen: dies würde mit "2016" oder "quit"/"exit" sogar hervorragent passen. Dann Integer parsen und da mittels try catch die NumberFormatException abfangen und im Falle der Exception mit break aus der while-Schleife gehen. Natürlich wird die Schleife dann auch bei "12s3" beenden, aber ich glaube das ist nebensächlich.
@mariane
Ein Endlosschleife durch while (true) nützt mir leider nichts, da sich mein Programm sofort wiederholen würde, sobald es eine zu erechnende Eingabe erhält. Es würde also der Zwischenschritt des Usereingriff zur Fortgührung/Abbruch des Programms fehlen.
@InfectedBytes
Mussnach while nicht noch ne Anweisung gebeben werden? Mir wird ausgesagt, dass die Anweisung leer sein; bisher ist es ja durch das eingabe.equals ("Y") nur eine Bedingung, oder nicht!?
package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
public static void main(String[] args) {
Scanner keyboard=new Scanner(System.in);
int Jahr;
String eingabe;
{System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
String line=keyboard.nextLine();
if ((line.length() < 4) || (line.length()>4)) {System.out.print("Das Jahr " + line + " kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.");
System.out.println("The year "+line+ " is not computable. The number has to have four digits." );
}
else{Jahr=Integer.parseInt(line);
if (Jahr==0000) {System.out.println("Das Jahr 0000 ist ein Schaltjahr");
System.out.println("The year 0000 is a leap-year.");
}
else if(Jahr<0) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums.");
System.out.println("The number is not computable.");
}
else if (Jahr>=2101) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums. ");
System.out.println("The number is not computalbe.");
}
else if (Jahr % 100 == 0) {System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " + line + " is not a leap-year.");
}
else if ((Jahr % 400 == 0)) {System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year " + line + " is a leap-year.");
}
else if (Jahr % 4==0) {System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year "+line+" is a leap-year.");
}
else if((Jahr % 4 != 0) && (Jahr % 400 != 0)) {System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " +line+ " is not a leap-year.");}
System.out.println("Wollen Sie eine erneute Berechnung starten? Y/N");
System.out.println("Do you want to start a new calculation?");
eingabe=keyboard.nextLine();
while(eingabe.equals("Y"));
}}}}
ändert leider garnichts. programm stürzt immer noch a mit der Begründung, dass nach while keine Anweisung steht.
Auch nimmt er dann die Variable "eingabe" als nicht initialisiert an....
jedoch nur im while(eingabe.equals("Y");
package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
public static void main(String[] args) {
Scanner keyboard=new Scanner(System.in);
int Jahr;
String eingabe;
do{
{System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
String line=keyboard.nextLine();
\\--> komplette Berechnung mit verschachtelten if-else-Bedingungen
System.out.println("Wollen Sie eine erneute Berechnung starten? Y/N");
System.out.println("Do you want to start a new calculation?");
eingabe=keyboard.nextLine();
while(eingabe.equals("Y"));
}}}}}
und auch sonst hast du dort verdächtig viele schließende Klammern. Wenn du deinen Code einfach ordentlich einrücken würdest, könntest du direkt sehen wo du deine ganzen weiteren falschen Klammern hast.
So wie dein Code ausschaut ist er leider schwer zu lesen :/ es pickt alles beieinander.
Wie InfectedBytes schon sagt wäre eine korrekte Einrückung da sehr hilfreich.
Beispiel:
Java:
package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int jahr;
String eingabe;
do {
System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
String line = keyboard.nextLine();
if (line.length() != 4) {
System.out.print("Das Jahr " + line + " kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.");
System.out.println("The year " + line + " is not computable. The number has to have four digits." );
} else {
jahr = Integer.parseInt(line);
if (jahr == 0000) {
System.out.println("Das Jahr 0000 ist ein Schaltjahr");
System.out.println("The year 0000 is a leap-year.");
} else if(jahr < 0) {
System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums.");
System.out.println("The number is not computable.");
} else if (jahr >= 2101) {
System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums. ");
System.out.println("The number is not computalbe.");
} else if (jahr % 100 == 0) {
System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " + line + " is not a leap-year.");
} else if ((jahr % 400 == 0)) {
System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year " + line + " is a leap-year.");
} else if (jahr % 4 == 0) {
System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year " + line + " is a leap-year.");
} else if((jahr % 4 != 0) && (jahr % 400 != 0)) {
System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " + line + " is not a leap-year.");
}
System.out.println("Wollen Sie eine erneute Berechnung starten? Y/N");
System.out.println("Do you want to start a new calculation?");
eingabe = keyboard.nextLine();
}
} while(eingabe.equals("Y"));
}
}
package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
public static void main(String[] args) {
Scanner keyboard=new Scanner(System.in);
int Jahr;
String eingabe;
do{
{System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
String line=keyboard.nextLine();
\\ Berechnung
System.out.println("The year " +line+ " is not a leap-year.");
System.out.println("Wollen Sie eine erneute Berechnung starten? Y/N");
System.out.println("Do you want to start a new calculation? Y/N");
eingabe=keyboard.nextLine();
}}
while(eingabe.equals("Y"));
}}
Die letzte Klammer er dem "while(eingabe...... " ist die entgegengesetzte Klammer zu do.
an der angeblich nicht intialisierten String "eingabe" hat sich noch nicht geändert.
ich habe jetzt alle Klammern so gesetzt wie du meintest (bzw. wie ich es verstanden habe....)
Java:
package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
public static void main(String[] args) {
Scanner keyboard=new Scanner(System.in);
int Jahr;
String eingabe;
do{
{System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
String line=keyboard.nextLine();
if ((line.length() < 4) || (line.length()>4)) {System.out.print("Das Jahr " + line + " kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.");
System.out.println("The year "+line+ " is not computable. The number has to have four digits." );
}
else{Jahr=Integer.parseInt(line);
if (Jahr==0000) {System.out.println("Das Jahr 0000 ist ein Schaltjahr");
System.out.println("The year 0000 is a leap-year.");
}
else if(Jahr<0) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums.");
System.out.println("The number is not computable.");
}
else if (Jahr>=2101) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums. ");
System.out.println("The number is not computalbe.");
}
else if (Jahr % 100 == 0) {System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " + line + " is not a leap-year.");
}
else if ((Jahr % 400 == 0)) {System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year " + line + " is a leap-year.");
}
else if (Jahr % 4==0) {System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year "+line+" is a leap-year.");
}
else if((Jahr % 4 != 0) && (Jahr % 400 != 0)) {System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " +line+ " is not a leap-year.");}}}
System.out.println("Wollen Sie eine erneute Berechnung starten? Y/N");
System.out.println("Do you want to start a new calculation? Y/N");
eingabe=keyboard.nextLine();
while(eingabe.equals("Y"));
}}}
jetzt fehlt wieder die Klammer die direkt vor dem while stehen sollte...
Java:
Scanner keyboard=new Scanner(System.in);
int Jahr; // würde ich lieber in die Schleife packen...und klein schreiben...
String eingabe;
do {
// hier kommt einfach nur dein Berechnungscode hin,
// also einfach nur deine Berechnungen, println und if's
eingabe = keyboard.nextLine();
} while(eingabe.equals("Y"));
// Die schließende Klammer darfst du nicht einfach weglassen oder woanders hin schreiben.
Und die schließenden Klammern der if-Abfragen dürfen natürlich NICHT außerhalb der schleife stehen
super. ich hab es. danke an alle. man muss echt akribich uf alle klammern achten.
habe es jetzt so, und der code läuft:
Java:
package schaltjahrrechner;
import java.util.Scanner;
public class Schaltjahrrechner {
public static void main(String[] args) {
Scanner keyboard=new Scanner(System.in);
int Jahr;
String eingabe;
do{
{System.out.println("Geben Sie eine vierstellige Jahreszahl.");
System.out.println("Please enter a number of a year, the number has to have four digits.");
System.out.println("Bedingung: Die Zahl muss >= 0000 sein");
System.out.println("Condition: The number have to be >= 0000");
System.out.println("Bedingung: Die Zahl muss <= 2100 sein.");
System.out.println("Condition: The number has to be <=2100.");
String line=keyboard.nextLine();
if ((line.length() < 4) || (line.length()>4)) {System.out.print("Das Jahr " + line + " kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.");
System.out.println("The year "+line+ " is not computable. The number has to have four digits." );
}
else{Jahr=Integer.parseInt(line);
if (Jahr==0000) {System.out.println("Das Jahr 0000 ist ein Schaltjahr");
System.out.println("The year 0000 is a leap-year.");
}
else if(Jahr<0) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums.");
System.out.println("The number is not computable.");
}
else if (Jahr>=2101) {System.out.println("Diese Zahl ist außerhalb des berechenbaren Zahlenraums. ");
System.out.println("The number is not computalbe.");
}
else if (Jahr % 100 == 0) {System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " + line + " is not a leap-year.");
}
else if ((Jahr % 400 == 0)) {System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year " + line + " is a leap-year.");
}
else if (Jahr % 4==0) {System.out.println("Das Jahr " + line + " ist ein Schaltjahr");
System.out.println("The year "+line+" is a leap-year.");
}
else if((Jahr % 4 != 0) && (Jahr % 400 != 0)) {System.out.println("Das Jahr " + line + " ist kein Schaltjahr");
System.out.println("The year " +line+ " is not a leap-year.");}}
System.out.println("Wollen Sie eine erneute Berechnung starten? Y/N");
System.out.println("Do you want to start a new calculation? Y/N");
eingabe=keyboard.nextLine();
}}while(eingabe.equals("Y"));
Ergebnis:
run:
Geben Sie eine vierstellige Jahreszahl.
Please enter a number of a year, the number has to have four digits.
Bedingung: Die Zahl muss >= 0000 sein
Condition: The number have to be >= 0000
Bedingung: Die Zahl muss <= 2100 sein.
Condition: The number has to be <=2100.
4563
Diese Zahl ist außerhalb des berechenbaren Zahlenraums.
The number is not computalbe.
Wollen Sie eine erneute Berechnung starten? Y/N
Do you want to start a new calculation? Y/N
Y
Geben Sie eine vierstellige Jahreszahl.
Please enter a number of a year, the number has to have four digits.
Bedingung: Die Zahl muss >= 0000 sein
Condition: The number have to be >= 0000
Bedingung: Die Zahl muss <= 2100 sein.
Condition: The number has to be <=2100.
34234
Das Jahr 34234 kann nicht berechnet werden. Sie müssen vier Ziffern eingeben.The year 34234 is not computable. The number has to have four digits.
Wollen Sie eine erneute Berechnung starten? Y/N
Do you want to start a new calculation? Y/N
Y
Geben Sie eine vierstellige Jahreszahl.
Please enter a number of a year, the number has to have four digits.
Bedingung: Die Zahl muss >= 0000 sein
Condition: The number have to be >= 0000
Bedingung: Die Zahl muss <= 2100 sein.
Condition: The number has to be <=2100.
Danke an alle, ein ganz ganz herzlichen Danke geht an InfectedBytes. Ich werde demnächst die Klammern bedächtiger setzen.
In dem geposteten Code fehlen trotzdem wieder welche.
Die Abfragen sind noch nicht ganz korrekt. Für durch 400 teilbare Jahreszahlen kommen falsche Ergebnisse.