# If abfrage in switch case einbauen



## Icke (9. Nov 2008)

Hallo. Würde gerne eine If-Abfrage in eine switch case einbauen, aber mein prog meckert immer, dass er das net will .. was mache ich falsch?


```
switch (monat) {
                                 case 2:
				    monat=if(jahr%4!=0 || jahr%4==0 && jahr%100!=0) TextIO.putln("28");
				       else (jahr%4==0 || jahr%400==0) TextIO.putln("29");   break;
                                       ....}
```


----------



## Marco13 (9. Nov 2008)

monat=if...  ???:L 
Lass' mal das "monat=" weg. Eigentlich geht das ganz straightforward:

```
switch (x)
{
    case 0:
        if (y) System.out.println("y");
        else System.out.println("not y");
        break;
}
```


----------



## Icke (9. Nov 2008)

aba monat ist die variable die vorher vom benutzer eingegeben wurde.. und wenn er 2 gedrückt hat, soll hat geschaut werden ob das jahr ( was davor eingegeben wurde ) ein schaltjahr ist oda net .. und deswegen die berechnungen ^^


----------



## Marco13 (9. Nov 2008)

Ja, aber was hat das "monat" da verloren?

if(jahr%4!=0 || jahr%4==0 && jahr%100!=0) TextIO.putln("28");
else /* * was sollte das noch hier? * (jahr%4==0 || jahr%400==0) */ TextIO.putln("29");  

sollte es doch tun? Poste notfalls mal das komplette Programm, und sag' was es machen soll


----------



## Icke (9. Nov 2008)

```
public class Kalendar 
 {
	public static void main(String[] args)
	{
		TextIO.putln("Geben Sie bitte ein Jahr an, dass groeßer ist als 1582:");
		int jahr = TextIO.getInt();
         
		if (jahr<1583) {
		  TextIO.putln("Ihr eingegebenes Jahr ist nicht im Wertebereich!!!");
		   System.exit(0);
		} else {
		  TextIO.putln("Geben Sie nun bitte den Monat an:");
		}
		   /*Man könnte das Problem auch mit einer while Schleife lösen:
		    * 
		    * while (jahr<1582) {TextIO.putln("Dies ist eine falsche Jahresgröße. Bitte geben Sie eine neue ein.");
        jahr = TextIO.getInt(); }
        TextIO.putln("Geben Sie nun bitte den Monat an:"); */
		
		 TextIO.putln("Januar=1      Februar=2");
		 TextIO.putln("Maerz=3       April=4");
		 TextIO.putln("Mai=5         Juni=6");
		 TextIO.putln("Juli=7        August=8");
		 TextIO.putln("September=9   Oktober=10");
		 TextIO.putln("November=11   Dezember=12");
		 
		 int monat = TextIO.getInt();


		 if (monat!=1 && monat!=2 && monat!=3 && monat!=4 && monat!=5 && monat!=6 && monat!=7 && monat!=8 && monat!=9 && monat!=10 && monat!=11 && monat!=12)
		 { TextIO.putln("Dies ist eine falsche Monatsgröße.");
		 System.exit(0);
			} else 
		 
		 switch (monat) {
			case 1: 
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
		     monat=31;  break;
				
			case 4:
			case 6:
			case 9:
			case 11:
				monat=30; break;
			
			case 2:
				monat=if(jahr%4!=0 || jahr%4==0 && jahr%100!=0) TextIO.putln("28");
				       else (jahr%4==0 || jahr%400==0) TextIO.putln("29");   break; 
			   
			  
		 }  TextIO.putln("Der Monat hat " + monat + " Tage."); 
     }
 }
```


Das Programm soll erst nach dem jahr , dann nach dem monat fragen und asugeben, wie viele tage dieser monat hat. bei februar ist es ja komplizierter, da der februar alle paar jahre wieda ein schaltjahr ist, deswegen diese if-abfrage. nur weiss ich net wie ich das dort an der stelle einbauen kann. unter case2  monat=if ... funtzt halt net ^^


----------



## Fu3L (9. Nov 2008)

Icke hat gesagt.:
			
		

> ```
> if (monat!=1 && monat!=2 && monat!=3 && monat!=4 && monat!=5 && monat!=6 && monat!=7 && monat!=8 && monat!=9 && monat!=10 && monat!=11 && monat!=12)
> {
> ```



Man kanns sich auch kompliziert machen  :wink: :


```
if(monat <= 0 || monat > 12) {
```

Zu deinem eigentlich Problem:

Bestimme vorher, ob das Jahr ein Schaltjahr ist, speicher das Ergebnis in ein boolean und dann machs so:


```
monat = dieBooleanVariable ? 29 : 28;
```

Das ganze jetzt ausm Kopf, ohne geprüft zu haben, obs funktioniert....

Edit: Natürlich kann man anstatt der booleanVariablen auch den Ausdruck schreiben, den du vorher im if stehe hattest oder man könnte es auch mit if und else machen und im Ausführungsblock monat den richtigen Wert zuweisen, aber sowas in der Art "monat = if() {}" is nicht gut....


----------

