# Java  Fehler (If?)



## Creed7 (14. Dez 2011)

So kann mir jemand sagen was ich andauernt falsch mache


```
package gameserver.services;

(hab imports mal weggelassen)


/**
 * @author Ihateyou        
  * @author Ihateyou       
 *
 */
public class Testme 
{
  
		public boolean test(final Player player,int zahl )
		{
			{
	if(zahl == 0)
               TeleportService.teleportTo(player, 300170000, 528.27496f, 1345.001f, 223.52919f, 14);
                  } 
			
			
	if (zahl == 1) {			
	          TeleportService.teleportTo(player, 300170000, 528.27496f, 1345.001f, 223.52919f, 14);
	            return;      	
                          }

          if (zahl == 2)    {		
		 TeleportService.teleportTo(player, 300170000, 528.27496f, 1345.001f, 223.52919f, 14);
                 return;
                        }


            if (zahl == 3)    { 		            	
		 TeleportService.teleportTo(player, 300170000, 528.27496f, 1345.001f, 223.52919f, 14);
		 return;
	                  }


            if (zahl == 4)  {
		 TeleportService.teleportTo(player, 300170000, 528.27496f, 1345.001f, 223.52919f, 14);
		  return;
                           }
		            

						
					
							

		 }

	}//ende
```

So jezt hätte ich das problem Missing return value und wenn ich return value test eintrage kommt fehler cannt find symbol variable test.

würde net auch eig ein return am ende auch reichen bzw alles ohne geschweifte KLammern, bzw denn sendet compiler mir glaub ich den fehler not a statement ..

bitte kann mir da jemand weiterhelfen der code gehört zu den spiel aion.


----------



## ARadauer (15. Dez 2011)

minecraft oder?

naja... also du schreibst dass deine methode einen boolean Wert zurück gibt...
Das machst du aber nicht...
schreib bei public boolean test
statt dem boolean einfach void


----------



## Creed7 (15. Dez 2011)

thx es geht musste aber noch alle return blöcke entfernen...^^ bzw ein kurz vorm ende der klasse setzen


----------



## Landei (15. Dez 2011)

Kennst du switch?


```
switch(zahl) {
  case 0 : TeleportService.teleportTo(player, 300170000, 528.27496f, 1345.001f, 223.52919f, 14); break;
  case 1 : TeleportService.teleportTo(player, 300170000, 528.27496f, 1345.001f, 223.52919f, 14); break;
  //u.s.w.
  default : throw new IllegalArgumentException("was'n dat?");
}
```

Beachte aber, dass jeder [c]case[/c]-Zweig mit einem [c]break;[/c] (macht nach dem 
	
	
	
	





```
switch
```
-Block weiter) oder [c]return[/c] abgeschlossen werden muss, sonst geht die Abarbeitung einfach in der nächsten Zeile weiter ("Durchfallen"), was nur sehr selten gebraucht wird (das einzige sinnvolle Beispiel mit "Durchfall", das ich kenne, ist Duff's Device).

Du tust aber in jeder Bedingung genau das Gleiche. Falls du das _wirklich _willst, kannst du das natürlich zusammenfassen:[c]if (0 <= zahl && zahl <= 4) {...}[/c]


----------



## Creed7 (15. Dez 2011)

aso thx ne das in jeder bedingung das selbe ausgeführt wird ist nciht geplant,

aber stmmt über switch befehl sieht das 1 besser und geordneter aus und 2.kan mann so unnötige fehler vermeiden.

bloß mein prob besteht darin das falls er case 1 benutzt hat immer case 2 ..und immer so weiter ausführt
( sodass er sagen wir mal nur 12 verschiede teleport commands ausführt)

hatte dies über det gelöst  

zahl = zahl +1 ; nach jeden case aber das haut ja denn garnet mehr so hin


----------



## Eldorado (15. Dez 2011)

In dem Quelltext oben sehe ich noch einen Klammerfehler: Die öffnende geschweifte Klammer in Zeile 16 müsste doch eher an das Ende von Zeile 17, oder?


----------



## Murray (15. Dez 2011)

Creed7 hat gesagt.:


> bloß mein prob besteht darin das falls er case 1 benutzt hat immer case 2 ..und immer so weiter ausführt
> ( sodass er sagen wir mal nur 12 verschiede teleport commands ausführt)


Wie Landei schon schrieb: entscheidend ist die break-Anweisung in jedem Zweig, ansonsten geht es - unabhängig von der Bedingung - einfach weiter im Code.


----------



## Landei (15. Dez 2011)

Murray hat gesagt.:


> Wie Landei schon schrieb: entscheidend ist die break-Anweisung in jedem Zweig, ansonsten geht es - unabhängig von der Bedingung - einfach weiter im Code.



Ich weiß da ist eine Stolperfalle für Anfänger, ich beschreibe Lösung und Problem möglichst ausführlich und verständlich, und dann wird es überlesen. Manchmal frage ich mich, ob wir ein Blinken-Tag im Forum brauchen...


----------



## SlaterB (15. Dez 2011)

passiert eigentlich bei allen Zahlen das gleiche? dann wäre 'Durchrutschen' doch besser, wobei dann nur am Ende ein Teleport steht,
nicht bei jedem case eines,

oder wieder if verwenden: if (zahl >= 1 && zahl <= 10) { .. } oder was auch immer


----------



## Creed7 (15. Dez 2011)

so bin jeztz so weit


```
package gameserver.services;



/**
 * @author Ihateyou        
  * @author Ihateyou       
 *
 */
public class Testme 
{
  
		public static void test(final Player player)
		{
			
			int zahl = 0;
			final WorldMapInstance instance = InstanceService.createInstance(300170000);     
			
            switch(zahl) {
            case 0 : 			
								player.Status = 4;
								teleport(player, instance.getMapId(), instance.getInstanceId());
								zahl = zahl +1 ; break;
            					
            					
            case 1 : 			
								player.Status = 5;
								teleport(player, instance.getMapId(), instance.getInstanceId());
								zahl = zahl +1 ; break;
								
            case 2 : 			
								player.Status = 6;
								teleport(player, instance.getMapId(), instance.getInstanceId());
								zahl = zahl +1 ; break;
								
            case 3 : 
            	PacketSendUtility.sendPacket(player, new SM_MESSAGE(0, null, "noch auszudenken", ChatType.SYSTEM_NOTICE)); break;
								
            default : throw new IllegalArgumentException("noch auszudenken")  ;
            
							
            
          }			

		 }//ende test
		
		
		public static void teleport(Player player, int Mapid, int InstanceId)
		{
			 if(player.Status == 0)
		            TeleportService.teleportTo(player, Mapid, 2, (float) 528.27496, (float) 1345.001, (float) 223.52919, (byte) 60, 1000);
	
			
			if(player.Status == 4)
	            TeleportService.teleportTo(player, Mapid, 2, (float) 528.27496, (float) 1345.001, (float) 223.52919, (byte) 60, 1000);
	    
			 if(player.Status == 5)
		            TeleportService.teleportTo(player, Mapid, 2, (float) 528.27496, (float) 1345.001, (float) 223.52919, (byte) 60, 1000);
			 
			 if(player.Status == 6)
		            TeleportService.teleportTo(player, Mapid, 2, (float) 528.27496, (float) 1345.001, (float) 223.52919, (byte) 60, 1000);
		      
		}

	}//ende class
```



so der Problem ist wieso benutzt er immer case 0 jemand ne ahnung wieso er nicht 1 dazu addiert


----------



## SlaterB (15. Dez 2011)

zahl ist doch eine lokale Variable, beim nächsten Methodendurchlauf wird selbstverständlich wieder mit
> int zahl = 0;
angefangen..,
und während des switch erhöhen wird nicht zu anderen (weiteren) case führen, das erwartest du hoffentlich nicht


----------



## Creed7 (15. Dez 2011)

SlaterB hat gesagt.:


> zahl ist doch eine lokale Variable, beim nächsten Methodendurchlauf wird selbstverständlich wieder mit
> > int zahl = 0;
> angefangen..,
> und während des switch erhöhen wird nicht zu anderen (weiteren) case führen, das erwartest du hoffentlich nicht



gut zu wissen also hast du ne möglichkeit so außen stehgreif wie ich das erhöhen kann?
( mein altes if konzept wieder)??


----------



## SlaterB (15. Dez 2011)

ich habe doch zwei Dinge angesprochen, was davon meinst du?
> ( mein altes if konzept wieder)?? 
klingt nach Änderung und dann weitere Fälle bearbeiten, dafür könnten mehrere einzelne ifs hintereinander besser funktionieren, ja

wenn es andererseits um die mehreren Methodenaufrufe geht, schließlich wären Abfragen ganz egal wenn zahl immer bekannten Wert 0 hätte,
dann hilft offensichtlich, die Variable als Attribut zu speichern, entweder einfach außerhalb der Methode,
oder angebracht im Player-Objekt, also pro Player eigenen test-Stand?

na ich kann das aus der Ferne nicht beurteilen und solche einfachen Grundbausteine solltest du eigentlich können
oder in noch einfacheren Programmen ohne Teleports und komplizierte siebendstellige Kommazahlen testen


----------



## Creed7 (15. Dez 2011)

hihi telport und kommazahen stehen nur für x y und z--dies funzt einwand frei

naj werd denn mal wieder konzept umwerfen ^^ aber dank dir


----------



## fastjack (15. Dez 2011)

nimm wenigstens else if (...)


----------

