Ich habe folgendes Anliegen:
Ich versuche 2 schleifen zu machen, oben im Klassenkopf habe ich einen boolean deklariert namens "form".
Java:
privateStringgetKopfzeileMonatsblatt(int jahr,int monat){StringKopfzeile="*******************"+kalfunk.monatsname[monat]+" "+jahr+"******************* \r";if(form){int y =1;System.out.print(Kopfzeile);for(int x =0; x <7; x++){System.out.print(kalfunk.wochentagkurz[x]+" ");}}else{System.out.print(Kopfzeile);for(int y =1; y <7; y++);{System.out.print(kalfunk.wochentagkurz[y]+" ");System.out.print(kalfunk.wochentagkurz[0]+" ");}}returnKopfzeile;}
Wenn man nämlich in dem true teil der if anweisung reinschaut, sieht man das er bei der variablen x nämlich nicht meckert, aber bei der variablen y schon.
privateboolean form =true;privateStringgetKopfzeileMonatsblatt(int jahr,int monat){StringKopfzeile="*******************"+ kalfunk.monatsname[monat]+" "+ jahr +"******************* \r";if(form){int y =1;System.out.print(Kopfzeile);for(int x =0; x <7; x++){System.out.print(kalfunk.wochentagkurz[x]+" ");}}else{System.out.print(Kopfzeile);for(int y =1; y <7; y++){System.out.print(kalfunk.wochentagkurz[y]+" ");System.out.print(kalfunk.wochentagkurz[0]+" ");}}returnKopfzeile;}staticclass kalfunk {staticString[] monatsname =newString[12];staticint[] wochentagkurz =newint[7];}
vielen Dank für die Antwort, aber könntest du erklären was du gemacht hast, bevor ich das übernehme?
Würde es gut finden, wenn ich was daraus lernen kann.
Außerdem eine ergänzende Frage:
hier ist mein gesamter Programmcode für einen Kalender.
Könnte jemand erfahrenes den mal abspielen lassen?
Es beinhaltet keinen einzigen Compiler Fehler atm. Nur bei intellij könnte das /r ein Problem darstellen(soweit ich informiert bin).
Java:
package kalender;importjava.text.DecimalFormat;importjava.util.Scanner;publicclassKalender{Scanner scan =newScanner(System.in);KalenderFunktionen kalfunk =newKalenderFunktionen();boolean form =true;/**
* Beschreibung: Erzeugt ein Monatsblatt des Jahreskalenders
* und gibt das Monatsblatt in Stringform zurück.
* Das Monatsblatt wird in einem String mit Zeilenumbrüchen abgelegt.
* Das Monatsblatt enthält immer die Kopfzeile für den entsprechenden Monat.
* Beispiel:
*
******************* Mai 2016 *******************
So Mo Di Mi Do Fr Sa
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
*
*@param jahr - das Jahr zum Monat
*@param monat - der Monat, der angezeigt werden soll
*@return String - der zusammengebastelte String
*/// private String getMonatsblatt(int jahr, int monat){// // String pattern="###,#00";// DecimalFormat asdf = new DecimalFormat(pattern);// // if(kalfunk.istSchaltjahr(jahr)) {// for(int y=0;y < kalfunk.monatslaenge[1][monat];) {// if(y % 7 == 0) {// System.out.println();// }// System.out.print(asdf.format(y=y+1)+" " );// System.out.print(" ");// }// return " ";// } else {// for(int y=0;y < kalfunk.monatslaenge[0][monat];) {// if(y % 7 == 0) {// System.out.println();// }// System.out.print(asdf.format(y=y+1) );// System.out.print(" ");// }// return " ";// } // private String getMonatsblatt(int jahr, int monat){// // String pattern="###,#00";// DecimalFormat asdf = new DecimalFormat(pattern);// for(int t=0; t<kalfunk.wochentag_im_jahr(jahr, kalfunk.tagesnummer(1, monat, jahr));t++){//System.out.print(" ");//}// if(kalfunk.istSchaltjahr(jahr)) {// for(int y=0;y < kalfunk.monatslaenge[1][monat];) {// if(y % 7 == 0) {// System.out.println();// }// System.out.print(asdf.format(y=y+1)+" " );// System.out.print(" ");// }// return " ";// } else {// for(int y=0;y < kalfunk.monatslaenge[0][monat];) {// if(y % 7 == 0) {// System.out.println();// }// System.out.print(asdf.format(y=y+1) );// System.out.print(" ");// }// return " ";// }// }privateStringgetMonatsblatt(int jahr,int monat){if(form){int day =0;int firstDay = kalfunk.wochentag_im_jahr(jahr, kalfunk.tagesnummer(1, monat, jahr));String pattern ="###,#00";DecimalFormat asdf =newDecimalFormat(pattern);if(kalfunk.istSchaltjahr(jahr)){for(int y =0; y < kalfunk.monatslaenge[1][monat]+ firstDay ; y++){if(y %7==0){System.out.println();}if(y ==0){for(int t =0; t < firstDay; t++){System.out.print(" ");System.out.print(" ");System.out.print(" ");System.out.print(" ");
y++;}}System.out.print(asdf.format(day = day +1)+" ");System.out.print(" ");}return" ";}else{for(int y =0; y < kalfunk.monatslaenge[0][monat]+ firstDay;){if(y %7==0){System.out.println();}if(y ==0){for(int t =0; t < firstDay; t++){System.out.print(" ");System.out.print(" ");System.out.print(" ");System.out.print(" ");
y++;}}System.out.print(asdf.format(day = day +1)+" ");System.out.print(" ");}}}return" ";}/**
* Methode, um die Kopfzeile eines Monatsblattes in Stringform zurückzugeben.
* Dieses erfordert die Übergabe des Monats und des Jahres als Integer
* und liefert die Kopfzeile komplett als String zurück.
* @param jahr - das Jahr zum Monat
* @param monat - der Monat, der angezeigt werden soll
* @return liefert die Kopfzeile komplett als String zurück
* Beispiel:
******************* Mai 2016 *******************
So Mo Di Mi Do Fr Sa
*
*/privateStringgetKopfzeileMonatsblatt(int jahr,int monat){StringKopfzeile="*******************"+kalfunk.monatsname[monat]+" "+jahr+"******************* \r";if(form){System.out.print(Kopfzeile);for(int x =0; x <7; x++){System.out.print(kalfunk.wochentagkurz[x]+" ");}}else{System.out.print(Kopfzeile);for(int y =1; y <7; y++){System.out.print(kalfunk.wochentagkurz[y]+" ");System.out.print(kalfunk.wochentagkurz[0]+" ");}}returnKopfzeile;}/**
* Methode zur Ausgabe eines Monatsblattes auf der Konsole
*
* @param jahr - das Jahr zum Monat
* @param monat - der Monat, der angezeigt werden soll
*/publicvoidzeigeMonat(int jahr,int monat){// String Kopfzeile = "*******************"+kalfunk.monatsname[monat]+ " " +jahr+"******************* \r";// System.out.println(Kopfzeile);//// String pattern="###,#00";// DecimalFormat form = new DecimalFormat(pattern);// for(int y=0;y < kalfunk.monatslaenge[1][monat];) {// if(y % 7 == 0) {// System.out.println();// }// System.out.print(form.format(y=y+1) );// System.out.print(" ");// // // if(kalfunk.istSchaltjahr(jahr)) { // }}// System.out.println(getKopfzeileMonatsblatt(jahr,monat));System.out.println(getMonatsblatt(jahr,monat));}/**
* Methode zur Ausgabe aller Monatblätter eines Jahres auf der Konsole
* @param jahr - das Jahr, das angezeigt werden soll.
*/publicvoidzeigeJahr(int jahr){for(int h =1;h <13;h++){getKopfzeileMonatsblatt(jahr,h);zeigeMonat(jahr,h);System.out.println();}}/**
* Die Methode liest eine Monatszahl ein,
* evaluiert diese Zahl auf den gültigen Bereich[1,..,12]
* und gibt die eingelesene und überprüfte Monatszahl zurück.
* Wenn der Benutzer keine gültige Monatszahl eingibt, verbleibt
* das Programm in der Einlese-Schleife.
* @return in - der eingelesene Monat
*/privateintliesMonat(){System.out.print("Bitte geben Sie den Monat ein:");int monat = scan.nextInt();do{System.out.println("Bitte geben Sie einen Wert zwischen 1 und 12 ein.");
monat = scan.nextInt();}while(monat >12|| monat <1);return monat;}/**
* Die Methode liest eine Jahreszahl ein,
* evaluiert diese Zahl auf die gültigen Ziffern
* und gibt die eingelesene und überprüfte Jahreszahl zurück.
* Wenn der Benutzer keine gültige Jahresangabe macht, verbleibt
* das Programm in der Einlese Schleife.
* @return int - das eingelesene Jahr
*/privateintliesJahr(){System.out.print("Bitte geben Sie das Jahr ein:");int jahr = scan.nextInt();do{System.out.print("Bitte ein Jahr zwischen 2000 und 2020 eingeben");
jahr = scan.nextInt();}while(jahr >2020|| jahr <2000);return jahr;}/**
* stellt das Auswahlmenü dar und liest die Benutzerauswahl ein.
* die Benutzerauswahl wird evaluiert auf Gültigkeit.
* Wenn der Benutzer keine gültige Eingabe macht, verbleibt
* das Programm in der Einlese-Schleife
*/publicvoidauswahlMenue(){// int jahr = liesJahr();// int monat = liesMonat();// getKopfzeileMonatsblatt(jahr, monat);// getMonatsblatt(jahr,monat);// // int jahr =0;int monat =0;int e =0;boolean operation =true;do{System.out.println("1: Amerikanisches Format oder 2: Deutsches Format?");
e = scan.nextInt();switch(e){case1: form =true;case2: form =false;default:System.out.println("Bitte geben Sie \"1\" oder \"2\" ein!");
e = scan.nextInt();}if(form){System.out.println("Bitte wählen Sie aus!");System.out.println("Auswahl 1: alle Monatsblätter eines Jahres"+"\t Auswahl 2: bestimmter Monat"+"\t Auswahl 9: Ich bin fertig :)");int f = scan.nextInt();switch(f){case1:zeigeJahr(liesJahr());break;case2:
jahr =liesJahr();
monat =liesMonat();System.out.println();getKopfzeileMonatsblatt(jahr, monat);zeigeMonat(jahr, monat);break;case9:System.out.println("Vielen Dank @Kuzuoglu");
operation =false;break;default:System.out.print("Bitte geben Sie korrekte Werte ein \n Auswahl 1: alle Monatsblätter eines Jahres \t Auswahl 2: bestimmter Monat \t Auswahl 9: Ich bin fertig :)");
f = scan.nextInt();}}else{int j = scan.nextInt();switch(j){case1:zeigeJahr(liesJahr());break;case2:
jahr =liesJahr();
monat =liesMonat();System.out.println();getKopfzeileMonatsblatt(jahr, monat);zeigeMonat(jahr, monat);break;case9:System.out.println("Vielen Dank @Kuzuoglu");
operation =false;break;default:System.out.print("Bitte geben Sie korrekte Werte ein \n Auswahl 1: alle Monatsblätter eines Jahres \t Auswahl 2: bestimmter Monat \t Auswahl 9: Ich bin fertig :)");
j = scan.nextInt();}}}while(operation ==true);}}
Ich komme nicht ganz hinter bei einigen Sachen.
Warum gibt es das sogenannte Monatsblatt nicht im eigentlichen Format aus, also die Woche beginnt mit Montag("Mo") und hört mit Sonntag auf("So"). Zeile 9 und 146 bis 161.
Warum muss ich beim Scanner erst 0 eingeben, bevor er die 1 oder 2 überhaupt akzeptiert? Zeile 257. - 262.
Warum funktioniert der Scanner generell inhaltlich nicht, habe ich was falsch programmiert bezüglich des boolischen Wertes "form"?
Ich würde gerne sagen, dass alles was als form = true programmiert ist im amerikanischen Format ausgegeben werden soll und alles als form = false soll deutsches Format sein.
Und warum macht er Probleme bei dem private int liesJahr()
Bevor ich den boolean eingearbeitet hatte, gab es keine Probleme, jetzt werden beim Testen gewisse eigentlich korrekte Werte nicht anerkannt.
Ich bedanke mich schonmal bei euch für eure Antworten und freue mich auf diese.
vielen Dank für die Antwort, aber könntest du erklären was du gemacht hast, bevor ich das übernehme?
Würde es gut finden, wenn ich was daraus lernen kann.
Ich hab es einfach formatiert, wollte ich damit sagen. Das kostet mich jetzt vor dem Spiel zu-viele Gehirnwindungen, um das Spiel nicht zu verpassen. Aber andere helfen sicher gern.