problem mit der return anweisung

  • Themenstarter Themenstarter beiertheim12
  • Beginndatum Beginndatum
B

beiertheim12

Gast
Java:
//monat hat so und so viel tage


import java.util.Scanner;

public class hop {

	 public static int tage (int i) {

				     if (i==1)  return 31;
				else if (i==2)  return 28;
				else if (i==3)  return 31;
				else if (i==4)  return 30;
				else if (i==5)  return 31;
				else if (i==6)  return 30;
				else if (i==7)  return 31;
				else if (i==8)  return 31;
				else if (i==9)  return 30;
				else if (i==10) return 31;
				else if (i==11) return 30;
				else if (i==12) return 31;


};   //ende tage

	public static void main(String[] Args){

		int i =0;
		int anzTag =0;
		Scanner ein = new Scanner(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
 
Zuletzt bearbeitet von einem Moderator:
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
}
 
Zuletzt bearbeitet:
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 😛)
 
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.

Ark
 
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 tage
 
 
import java.util.Scanner;
 
public class hop {
 
     public static int tage (int i) {
 
                     if (i==1)  return 31;
                else if (i==2)  return 28;
                else if (i==3)  return 31;
                else if (i==4)  return 30;
                else if (i==5)  return 31;
                else if (i==6)  return 30;
                else if (i==7)  return 31;
                else if (i==8)  return 31;
                else if (i==9)  return 30;
                else if (i==10) return 31;
                else if (i==11) return 30;
                else if (i==12) return 31;
					return 0;/* es muss auf jeden fall einmal ein 
					return gesetzt werden ohne if anweisung da die bedingungen davor vieleicht  
					nicht erfüllen können */
					
                     
                	
					
					
 
 
};   //ende tage
 
    public static void main(String[] Args){
 
        int i =0;
        int anzTag =0;
        Scanner ein = new Scanner(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:
public class hop {
 
     public static int tage (int i) {
         switch(i) {
             case 0: return 31; //oder bei 1 anfangen, wenn man so will
             case 1: return 28;
             .
             .
             .
             case 11: return 31;
             default: return -1; //bzw. Exception werfen
    }
}
 

Zurück
Oben