Je reçois toujours une erreur, if
sans else
.
J'ai essayé else if
ainsi que
for (;;){
System.out.println("---> Your choice: ");
choice = input.nextInt();
if (choice==1)
playGame();
if (choice==2)
loadGame();
if (choice==3)
options();
if (choice==4)
credits();
if (choice==5)
System.out.println("End of Game\n Thank you for playing with us!");
break;
else
System.out.println("Not a valid choice!\n Please try again...\n");=[;'mm
}
aussi si vous avez une meilleure idée sur la façon de présenter ce code, n'hésitez pas :)
Parce que votre else
n'est attaché à rien. Le if
sans accolades englobe uniquement la seule instruction qui le suit immédiatement.
if (choice==5)
{
System.out.println("End of Game\n Thank you for playing with us!");
break;
}
else
{
System.out.println("Not a valid choice!\n Please try again...\n");
}
Ne pas utiliser d'accolades est généralement considéré comme une mauvaise pratique car cela peut conduire aux problèmes exacts que vous avez rencontrés.
De plus, l'utilisation d'un switch
ici aurait plus de sens.
int choice;
boolean keepGoing = true;
while(keepGoing)
{
System.out.println("---> Your choice: ");
choice = input.nextInt();
switch(choice)
{
case 1:
playGame();
break;
case 2:
loadGame();
break;
// your other cases
// ...
case 5:
System.out.println("End of Game\n Thank you for playing with us!");
keepGoing = false;
break;
default:
System.out.println("Not a valid choice!\n Please try again...\n");
}
}
Notez qu'au lieu d'une boucle infinie for
, j'ai utilisé une while(boolean)
, ce qui facilite la sortie de la boucle. Une autre approche consisterait à utiliser la rupture avec les étiquettes.
La commande "break" ne fonctionne pas dans une instruction "if".
Si vous supprimez la commande "break" de votre code, puis testez le code, vous devriez constater que le code fonctionne exactement de la même manière sans commande "break" qu'avec une autre.
"Break" est conçu pour être utilisé à l'intérieur des boucles (for, while, do-while, Enhanced for et Switch).
Le problème est que vous essayez d'avoir plusieurs instructions dans un if
sans utiliser {}
. Ce que vous avez actuellement est interprété comme:
if( choice==5 )
{
System.out.println( ... );
}
break;
else
{
//...
}
Tu veux vraiment:
if( choice==5 )
{
System.out.println( ... );
break;
}
else
{
//...
}
En outre, comme Farce l'a déclaré, il serait préférable d'utiliser else if
pour toutes les conditions au lieu de if
car si choice==1
, il continuera à passer et vérifier si choice==5
, ce qui échouerait, et il ira toujours dans votre bloc else.
if( choice==1 )
//...
else if( choice==2 )
//...
else if( choice==3 )
//...
else if( choice==4 )
//...
else if( choice==5 )
{
//...
}
else
//...
Une solution plus élégante consisterait à utiliser une instruction switch
. Cependant, break
ne rompt qu'à partir du "bloc" le plus interne, sauf si vous utilisez des étiquettes. Donc, vous voulez étiqueter votre boucle et en sortir si le cas est 5:
LOOP:
for(;;)
{
System.out.println("---> Your choice: ");
choice = input.nextInt();
switch( choice )
{
case 1:
playGame();
break;
case 2:
loadGame();
break;
case 2:
options();
break;
case 4:
credits();
break;
case 5:
System.out.println("End of Game\n Thank you for playing with us!");
break LOOP;
default:
System.out.println( ... );
}
}
Au lieu d'étiqueter la boucle, vous pouvez également utiliser un indicateur pour indiquer à la boucle de s'arrêter.
bool finished = false;
while( !finished )
{
switch( choice )
{
// ...
case 5:
System.out.println( ... )
finished = true;
break;
// ...
}
}