web-dev-qa-db-fra.com

instruction break dans "if else" - java

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 :)

9
John

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.

13
Brian Roach

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).

13
Alan J. Robinson

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;
        // ...
    }
}
6
clcto