我不断收到错误,
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");
}
此外,如果您对如何呈现此代码有更好的想法,请不要犹豫:)
“break”命令在“if”语句中不起作用。
如果您从代码中删除“break”命令,然后测试该代码,您应该会发现没有“break”命令的代码与有“break”命令的代码的工作方式完全相同。
“Break”设计用于循环内部(for、while、do-while、增强型 for 和 switch)。
因为你的
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)
循环,这样可以轻松退出循环。另一种方法是使用带有标签的中断。
问题是您试图在
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;
// ...
}
}
有些人去那里提供代码的替代实现,操作代码不起作用的原因是缺少
{}
对;
if (choice==5) {
System.out.println("End of Game\n Thank you for playing with us!");
break;
} else
正如其他人指出的,没有大括号 (
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." ); }
}