# Kann man eine for-Schleife mit switch kombinieren?



## deanmap (17. Nov 2010)

Ich habe folgendes Problem.
In der Schule haben wir momentan Automaten und als Projekt sollen wir einen erstellen. Meiner hat viele Zustände und ich würde ihn gern vereinfachen. Ich habe die Klasse so versucht:


```
public class zust_wechs_getr {

     public int eing;
     public int ausg;


     public int wechseln(int eing, int ausg)
     {
       int i;
       switch(eing)
       {
         case 5:
              for(i=1; i<=40; i++)
              {
               switch(ausg)
               {
                case i: return (i+1);
               }
              }
         case 10:
              for (i=1; i<=39; i++)
              {
              switch(ausg)
               {
                case i: return (i+2);
               }
              }
         case 20:
              for (i=1; i<=38; i++)
              {
              switch(ausg)
               {
                case i: return (i+4);
               }
              }
         case 50:
               for (i=1; i<=31; i++)
              {
              switch(ausg)
               {
                case i: return (i+10);
               }
              }
         case 100:
               for (i=1; i<=21; i++)
               {
              switch(ausg)
               {
                case i: return (i+20);
               }
              }
         case 200:
              switch(ausg)
              {
               case 1: return 41;
               default: return 42;
              }
         default:
              switch(ausg)
              {
               default: return 42;
              }
       }
     }
}
```

aber es gibt ein Problem dabei die for-Schleife mit switch zu "erweitern".
Gibt es eine möglichkeit es irgendwie umzuformen bzw. gibt es bei mir einen kleinen Fehler, weil es nicht funktionieren will.

Schonmal Danke im voraus.


----------



## XHelp (17. Nov 2010)

Das sieht ein wenig... komisch aus. Was genau willst du damit erreichen?


----------



## Noctarius (17. Nov 2010)

Sieht nicht komisch aus, sondern nach Designfehler oder nach einem dringendem Refactoring und Factory-Pattern


----------



## WIaimy (17. Nov 2010)

warum benutzt du innerhalb der switch-Anweisung nochmal switch? Das könntest du alles mit einer if(), maximal if-else-Abfrage machen.


----------



## Noctarius (17. Nov 2010)

So ein riesen Konstrukt aus If-Else-ElseIf ist auch nicht schöner


----------



## deanmap (17. Nov 2010)

> Das sieht ein wenig... komisch aus. Was genau willst du damit erreichen?



Ich hab versucht zu erreichen, dass ich weniger Schreibarbeit hab (falls es möglich ist)
Falls ich z.B.

```
case 100:
               for (i=1; i<=21; i++)
               {
              switch(ausg)
               {
                case i: return (i+20);
               }
              }
```
umschreiben würde, würde es

```
case 100:
           switch(ausg)
             {
              case 1: return 21;
              case 2: return 22;
              case 3: return 23;
...
              case 21: return 41;
              default: return 42;
            }
```
so schreiben müssen, aber es ist mir zu viel schreibarbeit...
gibt es eine Möglichkeit es zu verkürzen/vereinfachen?


----------



## Marcinek (17. Nov 2010)

ehh


```
if(i < 22) 
 return i + 20;
else {
  return 42
}
```


----------



## Michael... (17. Nov 2010)

Die for-Schleife macht ja nicht unbedingt Sinn


deanmap hat gesagt.:


> ```
> case 100:
> for (i=1; i<=21; i++)
> {
> ...


liefert dasselbe wie:

```
case 100:
    if (ausg<1 || ausg>21)
        return 42;
    else
        return ausg + 20;
```


----------



## deanmap (17. Nov 2010)

Danke. Hat funktioniert.


----------

