//monat hat so und so viel tageimportjava.util.Scanner;publicclass hop {publicstaticint tage (int i){if(i==1)return31;elseif(i==2)return28;elseif(i==3)return31;elseif(i==4)return30;elseif(i==5)return31;elseif(i==6)return30;elseif(i==7)return31;elseif(i==8)return31;elseif(i==9)return30;elseif(i==10)return31;elseif(i==11)return30;elseif(i==12)return31;};//ende tagepublicstaticvoidmain(String[]Args){int i =0;int anzTag =0;Scanner ein =newScanner(System.in);System.out.println("monat als Zahl");
i = ein.nextInt();
anzTag =tage(i);System.out.println("Tage"+ anzTag);}//end main
ich habe ein kleines problem und zwar läuft das oben gezeite nicht. der compiler meint, er findet die return anweißung nicht.
wäre euch für eine lösung meines problems dankbar
gerne auch als mail :mado32@web.de
Wäre durchaus sinnvoll uns mitzuteilen in welcher Zeile der Compiler meckert.
EDIT: Ich "rate" jetzt mal und tippe auf das Ende der Methode tage(). Mach dort aus dem letzten else if ein else, oder noch besser hänge noch ein else dran das folgendermaßen aussieht:
Java:
...else{return-1;// Sobald der Aufrufer eine "NichtMonatsZahl" eingibt, bekommt er das zu spüren}
Was ist denn wenn i keines deiner Fälle erfüllt? (also nicht im Bereich 1...12 liegt)...dann wird eben nichts zurückgegeben, das geht nicht und das meckert er dir an !
(gib also irgendwie -1 oder so zurück oder wirf eine IllegalArgumentException() beispielsweise )
Du musst schon sagen welche Zeile das in dem Quelltext ist, den du hier im Forum gepostet hast, denn in Zeile 14 sehe ich hier keinen Grund für den Compiler zu meckern.
Mal davon abgesehen, dass Klassennamen groß geschrieben werden, der Parameter von [c]tage(…)[/c] besser [c]month[/c] (oder ähnlich) heißen und die Zählung besser bei 0 (für Januar) beginnen sollte: höchstwahrscheinlich sauberer ist eine Fehlermeldung:
[java=23]throw new IllegalArgumentException("illegal i: "+i);[/code]
Außerdem ist hier ein [c]switch[/c] erstens schneller und zweitens übersichtlicher.
Besser ist es, man legt die Tage in einem Array ab und rechnet vom Monat auf den Index zurück, ganz ohne if und switch.
Vorher auf Gültigkeit überprüfen und im Fehlerfall (<1 oder >12) eine IllegalArgumentException werfen. Ein Rückgabewert wie "0" oder "-1" ist schlecht, weil der Aufrufer das speziell in seinem normalen Code behandeln muss.
soo geht es aber ich würde es auch mit einem array machen
Java:
//monat hat so und so viel tageimportjava.util.Scanner;publicclass hop {publicstaticint tage (int i){if(i==1)return31;elseif(i==2)return28;elseif(i==3)return31;elseif(i==4)return30;elseif(i==5)return31;elseif(i==6)return30;elseif(i==7)return31;elseif(i==8)return31;elseif(i==9)return30;elseif(i==10)return31;elseif(i==11)return30;elseif(i==12)return31;return0;/* es muss auf jeden fall einmal ein
return gesetzt werden ohne if anweisung da die bedingungen davor vieleicht
nicht erfüllen können */};//ende tagepublicstaticvoidmain(String[]Args){int i =0;int anzTag =0;Scanner ein =newScanner(System.in);System.out.println("monat als Zahl");
i = ein.nextInt();
anzTag =tage(i);if(anzTag!=0){System.out.println("Tage"+ anzTag);}}}
Ja das return muss bei allen Eventualitäten aufgerufen werden.
Tipp:
Wieso nicht eine einfache Switch-Anweisung, statt dem if, else-if usw. Salat? :
Java:
publicclass hop {publicstaticint tage (int i){switch(i){case0:return31;//oder bei 1 anfangen, wenn man so willcase1:return28;...case11:return31;default:return-1;//bzw. Exception werfen}}