Java:“if else”中的break语句

问题描述 投票:0回答:5

我不断收到错误,

if
没有
else

我也尝试过

else if

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");
}

此外,如果您对如何呈现此代码有更好的想法,请不要犹豫:)

java if-statement for-loop infinite-loop break
5个回答
29
投票

“break”命令在“if”语句中不起作用。

如果您从代码中删除“break”命令,然后测试该代码,您应该会发现没有“break”命令的代码与有“break”命令的代码的工作方式完全相同。

“Break”设计用于循环内部(for、while、do-while、增强型 for 和 switch)。


20
投票

因为你的

else
不依附于任何东西。不带大括号的
if
仅包含紧随其后的单个语句。

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");
}

不使用大括号通常被视为不好的做法,因为它可能会导致您遇到的确切问题。

另外,这里使用

switch
会更有意义。

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");
     }
 }         

请注意,我使用了

for
,而不是无限的
while(boolean)
循环,这样可以轻松退出循环。另一种方法是使用带有标签的中断。


9
投票

问题是您试图在

if
中包含多个语句而不使用
{}
。 您当前拥有的解释如下:

if( choice==5 )
{
    System.out.println( ... );
}
break;
else
{
    //...
}

你真正想要的是:

if( choice==5 )
{
    System.out.println( ... );
    break;
}
else
{
    //...
}

此外,正如 Farce 所说,最好在所有条件下使用

else if
而不是
if
,因为如果
choice==1
,它仍然会检查并检查是否为
choice==5
,这会失败,并且它仍然会进入你的 else 块。

if( choice==1 )
    //...
else if( choice==2 )
    //...
else if( choice==3 )
    //...
else if( choice==4 )
    //...
else if( choice==5 )
{
    //...
}
else
    //...

更优雅的解决方案是使用

switch
语句。但是,除非您使用标签,否则
break
只会从最内部的“块”中断。所以你想标记你的循环并在情况为 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( ... );
    }
}

除了标记循环之外,您还可以使用标志来告诉循环停止。

bool finished = false;
while( !finished )
{
    switch( choice )
    {
        // ...
        case 5:
            System.out.println( ... )
            finished = true;
            break;
        // ...
    }
}

0
投票

有些人去那里提供代码的替代实现,操作代码不起作用的原因是缺少

{}
对;

    if (choice==5) {
        System.out.println("End of Game\n Thank you for playing with us!");
        break;
    } else

0
投票

大括号

正如其他人指出的,没有大括号 (

if
) 的
{…}
测试在满足其谓词时仅执行紧随其后的代码。

if ( true ) 
System.out.println( "Prints only when predicate is met." ) ;
System.out.println( "Prints *always*. Has nothing to do with the `if` test." ) ;

if ( false ) 
System.out.println( "Prints only when predicate is met." ) ;
System.out.println( "Prints *always*. Has nothing to do with the `if` test." ) ;

查看此代码在 Ideone.com 上运行

Prints only when predicate is met.
Prints *always*. Has nothing to do with the `if` test.
Prints *always*. Has nothing to do with the `if` test.

提示:作为 Java 初学者,始终在 if

 中包含大括号

切换表达式

现代 Java (14+) 为

switch
语句提供替代语法。这个新的箭头标签功能随JEP 361中描述的开关表达式一起出现。此功能允许“case L ->”标签而不是“case L :”标签。如果标签匹配,则仅执行箭头右侧的表达式或语句 - 不会失败。请使用
else
,而不是
default

这种替代语法更清楚地表达了您的想法。对于多行,请使用花括号,如

case 5
中所示。

    switch ( choice )
    {
        case 1 -> game.playGame ( );
        case 2 -> game.loadGame ( );
        case 3 -> game.options ( );
        case 4 -> game.credits ( );
        case 5 ->
        {
            System.out.println ( "End of Game\n Thank you for playing with us!" );
            go = false; // Halt the game.
        }
        default -> System.out.println ( "Not a valid choice!\n Please try again...\n" );

完整示例:

Scanner scanner = new Scanner ( System.in );
boolean go = true;
while ( go )
{
    Game game = new Game ( );

    System.out.println ( "---> Your choice: " );
    int choice = scanner.nextInt ( );
    switch ( choice )
    {
        case 1 -> game.playGame ( );
        case 2 -> game.loadGame ( );
        case 3 -> game.options ( );
        case 4 -> game.credits ( );
        case 5 ->
        {
            System.out.println ( "End of Game\n Thank you for playing with us!" );
            go = false; // Halt the game.
        }
        default -> System.out.println ( "Not a valid choice!\n Please try again...\n" );
    }
}

这是一个虚拟的

Game
实现,因此您可以尝试该代码。

class Game
{
    public void playGame ( ) { System.out.println ( "Playing game." ); }

    public void loadGame ( ) { System.out.println ( "Loading." ); }

    public void options ( ) { System.out.println ( "Options." ); }

    public void credits ( ) { System.out.println ( "Credits." ); }
}
© www.soinside.com 2019 - 2024. All rights reserved.