Frage von netsakremmuk, 31

brauche noch einmal hilfe bei java ^^?

ich habe nur einmal so aus spaß versucht die level mechanik von pokemon nachzustellen.( ja ich weiß, dass while an dieser stelle eher unpassend ist, aber ich habe mir vorgenommen mal was mit while zu basteln...) bei einer differenz, von orden(hier immer die eigentliche anzahl mal zehn genommen) und dem level, von weniger oder mehr, als zehn stellen, funktioniert auch alles wunderbar, aber bei einem abstand von genau zehn, wie man ihn auch im unten folgendem text sehen kann, wird mir beim ausführen weder ein positives, noch ein negatives ergebnis ausgegeben... warum?

public class pkmn {

public static void main(String[] args){

int orden = 4 * 10;

int level = 50;

switch (level){

case 20 :

while (orden < level - 20 || orden == level - 20){

}

System.out.println("pokemon gehorcht nicht");

break;

case 30 :

while (orden < level - 10 || orden == level - 10){

}

System.out.println("pokemon gehorcht nicht");

break;

case 40 :

while (orden < level - 10 || orden == level - 10){

}

System.out.println("pokemon gehorcht nicht");

break;

case 50 :

while (orden < level - 10 || orden == level - 10){

}

System.out.println("pokemon gehorcht nicht");

break;

case 60 :

while (orden < level - 10 || orden == level - 10){

}

System.out.println("pokemon gehorcht nicht");

break;

case 70 :

while (orden < level - 10 || orden == level - 10){

}

System.out.println("pokemon gehorcht nicht");

break;

case 80 :

while (orden < level - 10 || orden == level - 10){

}

System.out.println("pokemon gehorcht nicht");

break;

case 90 :

while (orden < level){

}

System.out.println("pokemon gehorcht nicht");

break;

default : System.out.println("pokemon gehorcht");

}}}
Antwort
von ceevee, 26

ja ich weiß, dass while an dieser stelle eher unpassend ist, ...

Das hast du absolut richtig erkannt. Deswegen solltest du die while-Schleifen rausschmeißen und die unnötige Fehlerursache damit entfernen.

while (orden < level - 10 || orden == level - 10){}

Wenn orden == level - 10 sind, dann ist das da oben eine Endlosschleife. Die Bedingung wird immer erfüllt sein (weil die Schleife gar nichts macht) und deswegen läuft die Schleife endlos. Davon mal abgesehen könnte man den Code auch sehr viel kürzer schreiben. Du weißt ja sicherlich selber, wie oft sich in dem Code irgendwas wiederholt, und das ist in den meisten Fällen ein schlechtes Zeichen.

Kommentar von netsakremmuk ,

es ging mir primär darum, etwas mit while zu machen, und nicht mit pokemon, somit war mir der erfolg egal, solange ich etwas aus meinem experiment ziehen kann ;-)  und danke für die antwort. das mit der endlos schleife sollte ich auch noch schmerzlich erfahren, als mir nach und nach java wegebrochen ist :D

Kommentar von ceevee ,

Angenommen, du willst ein Vogelhäuschen bauen. Gleichzeitig willst du aber unbedingt irgendwas mit deiner neuen Rohrzange machen, obwohl du sie eigentlich gar nicht brauchst. Also schlägst du die Nägel mit der Rohrzange ins Holz. Das sieht ganz schön doof aus und jeder, der halbwegs handwerken kann, würde dich dafür auslachen. Genau das machst du hier auch.

Beim Programmieren geht es darum, die Programmierelemente sinnvoll zu verwenden. Dein Code sieht ziemlich stark danach aus, als wenn du nicht wirklich verstanden hast, wozu eine while-Schleife gut ist, du setzt sie völlig falsch ein. Der Lerneffekt geht da gegen 0.

Eine while-Schleife brauchst du z.B., wenn zwei Pokemon sich bekämpfen und sie sich solange die gegnerischen HP senken oder die eigenen steigern, bis eins von beiden besiegt ist. ;)

Antwort
von JupStrunk, 31

weil das (überall) eine Endlosschleife ist, in der nichts passiert !!!

case 50 :
while (orden < level - 10 || orden == level - 10){
// Endlosschleife !!!!!
}

System.out.println("pokemon gehorcht nicht"); break;

außerdem solltest Du die Bedingung lieber so schreiben:

while (orden <= level - 10){
// Aktion hier einfügen
}

Kommentar von netsakremmuk ,
while (orden <= level - 10){
// Aktion hier einfüben
}

hatte ich am anfang auch so stehen, aus frust habe ich es aber geändert... naja, dann bleibt mir jetzt wenigstens die erinnerung an den versuch... danke für die antwort :D

Keine passende Antwort gefunden?

Fragen Sie die Community