1.break声明

让我们看一下上一课的一个例子:

代码 解释
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
该程序将从键盘读取一行,直到您输入"exit"

该程序从控制台读取行,直到exit输入单词。如果你输入这个词,则isExit 变量变为true,循环条件为,循环结束。”!isExitfalse

Java 有一个特殊的break语句可以让你简化这样的逻辑。如果break语句在循环内执行,则循环立即结束。程序将开始执行循环后面的语句。声明非常简短:

break;

以下是如何使用该break语句重写我们刚刚讨论的示例:

代码 解释
Scanner console = new Scanner(System.in);
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}
该程序将从键盘读取一行,直到您输入"exit"


2.继续声明

但这break并不是唯一允许您控制循环行为的 Java 语句。Java也有continue声明。continue如果在循环内执行语句,循环的当前迭代将提前结束。

执行一次循环体称为循环的一次迭代。该continue语句中断循环的当前迭代,但与该break语句不同的是,它不会结束循环本身。声明也很简短:

continue;

continue如果我们想在某些情况下“跳过”循环体的执行,该语句在循环中非常方便。

任务:我们要编写一个程序,打印从1到 的数字20,但跳过可被 整除的数字7。这就是这段代码的样子。

代码 解释
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
     continue;
   System.out.println(i);
   i++;
}
该程序显示从1到 的数字20。如果数字可以被整除7(除以的余数是70,那么我们就跳过显示数字。

实际上,这段代码是行不通的,因为i它会永远停留在数字上7。毕竟,该continue语句会跳过另外两个语句:System.out.println(i)i++。结果,一旦达到 value 7,变量i将停止变化,我们将陷入无限循环。

我们故意这样写代码来说明这个非常常见的错误。我们如何解决它?

这里有两个选项:

选项 1:i在执行之前更改continue,但之后i % 7

选项 2:i始终在循环开始时递增。但那时i的起始值必须是0.

选项1 选项 2
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
   {
     i++;
     continue;
   }
   
   System.out.println(i);
   i++;
}
int i = 0;
while (i < 20)
{
   i++;
   if ( (i % 7) == 0)
     continue;
   System.out.println(i);
}