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.
Das Programm sollte mit Enter abgebrochen werden -Was auch klappt!
Falls nicht sollte es im Loop weiterlaufen, nur beim zweiten Program durchlauf, kann ich kein Tag eingeben (Tagstr.Lenght() ist dan sofort 0) und das Programm bricht ab (Text "Das Programm wurde abgebrochen" wird ausgegeben)
Kann mir jemand weiterhelfen??
Wahrscheinlich mach ich ein kleiner Überlegungsfehler aber ich komm nicht drauf!
Java:
boolean loop = true;
public class Uebung6 {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
boolean loop = true;
int Jahr;
int Tag;
String Tagstr;
int Monatsc;
int Monat;
int Jahrhundert;
int JahresZahl;
int WochenTag;
String WochenTagText = null;
System.out.println("Das Programm kann bei der Eingabe \"Tag\" mit Leerzeile abgebrochen werden!!");
while(loop){System.out.print("Bitte Tag eingeben: ");
Tagstr = sc.nextLine();
if(Tagstr.length()==0){
System.out.println("\rDas Programm wurde abgebrochen");
loop=false;
}
else{
Tag = Integer.parseInt(Tagstr);
System.out.print("Bitte Monat eingeben:");
Monatsc = sc.nextInt();
System.out.print("Bitte Jahr eingeben:");
Jahr = sc.nextInt();
Jahrhundert = Jahr/100;
JahresZahl = (Jahr - Jahrhundert*100);
Jahrhundert = Jahr / 100;
JahresZahl = Jahr % 100;
if (Monatsc>2) {
Monat =Monatsc-3;
}
else {
Monat =Monatsc+9;
JahresZahl=JahresZahl-1;
}
WochenTag = (146097*Jahrhundert)/4 + (1461*JahresZahl)/4 + (153*Monat+2)/5 + Tag + 1721119;
WochenTag = WochenTag%7;
System.out.println("Das Datum "+ Tag+"." + Monatsc+"." + Jahr +" entspricht dem Tag "+WochenTagMethode(WochenTag,WochenTagText));
Schaltjahr(Jahr);
KeinSchaltjahr(Jahr);
}
}
}
Das liegt an nextLine(). So ganz verstehen tu ich den API Text auch nicht:
Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.
Since this method continues to search through the input looking for a line separator, it may buffer all of the input searching for the line to skip if no line separators are present.
Auf jeden Fall werden wohl noch irgendwelche Zeilenumbrüche von dein Eingaben des Monats und Jahres des vorigen Durchlaufs gepuffert sein, und er reagiert darauf..
Nimm statt nextLine() die Methode next().
Achtung: Die blockiert bis ein nicht-leerer String eingegeben wurde! D.h. Beenden mit Leertaste wird nicht mehr funtkionieren. Mach es statt dessen durch Eingabe von zB "q" für quit oder sowas.
Mit der Methode next() hab ich schon probiert(google sei dank ) und bin genau auf den Fehler gestossen, dass ich das Programm nicht mit Enter beenden kann.
Das Problem ist, die Aufgabenstellung lautet aber das Programm mit Enter Enden muss!