java迭代循环_循环,切换还是休息? 决定和迭代Java语句

java迭代循环

Java应用程序在语句的上下文中评估表达式,这些语句用于诸如声明变量,做出决定或遍历语句之类的任务。 语句可以表示为简单或复合语句:

  • 简单的语句是用于执行任务的单个独立指令。 它必须以分号( ; )结束。
  • 复合语句是一系列简单和其他复合语句,位于开括号和闭括号字符( {} )之间,它们界定了复合语句的边界。 复合语句可以为空,将在简单语句出现的任何地方出现,或者称为block 。 复合语句不以分号终止。

在本教程中,您将学习如何在Java程序中使用语句。 您可以使用诸如ifif-elseswitchforwhile语句来声明变量和指定表达式,进行决策,对语句进行迭代(或循环),中断并继续迭代等等。 我将为将来的Java 101教程保留一些更特殊的语句,例如用于从被调用方法返回值和引发异常的语句。

在Java 12中切换表达式

请注意,本教程已针对Java 12进行了更新,其中包括switch表达式的简短介绍。

下载
下载本教程中示例应用程序的源代码。 由Jeff Friesen为JavaWorld创建。

变量声明和赋值

之前,我已经介绍了Java变量,并说明了它们必须在使用前声明。 因为变量声明是独立的代码孤岛,所以实际上是一个语句-确切地说是一个简单的语句 。 所有这些都是变量声明语句:

int age = 25;
float interest_rate;
char[] text = { 'J', 'a', 'v', 'a' };
String name;

变量声明至少由类型名称组成,可以选择在其后跟一系列方括号对,然后是一个名称,并随后可以选择由方括号对序列,并以分号结尾。 变量也可以在其声明期间进行显式初始化。

现在考虑赋值语句 ,它与变量声明语句紧密相关。 赋值语句将值(可能是对数组的引用或对对象的引用)分配给变量。 这里有些例子:

age = 30;
interest_rate = 4.0F;
age += 10;
text[1] = 'A';
text[2] = 'V';
text[3] = 'A';
name = "John Doe";

赋值语句是expression语句的示例,该表达式是一个后跟分号的表达式 。 以下表达式也可以用作表达式语句:

  • 预增量(例如++x;
  • 递减(例如--y;
  • 后增量(例如x++;
  • 后减量(例如y--;
  • 方法调用(例如, System.out.println("Hello");
  • 对象创建(例如, new String("ABC");

用jshell进行变量声明

您可以使用jshell来试验变量声明和表达式语句。 这里是一些入门的示例(有关Java Shell的介绍,请参阅“ 从头开始学习Java ”):

jshell> int age = 25
age ==> 25

jshell> float interest_rate
interest_rate ==> 0.0

jshell> char[] text = { 'J', 'a', 'v', 'a' }
text ==> char[4] { 'J', 'a', 'v', 'a' }

jshell> String name
name ==> null

jshell> age = 30
age ==> 30

jshell> interest_rate = 4.0F
interest_rate ==> 4.0

jshell> age += 10
$7 ==> 40

jshell> text[1] = 'A'
$8 ==> 'A'

jshell> text[2] = 'V'
$9 ==> 'V'

jshell> text[3] = 'A'
$10 ==> 'A'

jshell> name = "John Doe"
name ==> "John Doe"

jshell> text
text ==> char[4] { 'J', 'A', 'V', 'A' }

jshell> age++
$13 ==> 40

jshell> age
age ==> 41

请注意, age++似乎没有完成任何事情。 在这里,您看到40已分配给临时变量$13 。 但是,后增量运算符在返回当前值之后执行增量。 (实际上,它将当前值存储在某个位置,执行增量,然后返回存储的值。)输入age证明age包含41,这是后增量操作的结果。

Java Shell提供了各种命令和功能,可简化片段的使用。 例如, /list命令显示在当前会话中输入的所有代码段:

jshell> /list

   1 : int age = 25;
   2 : float interest_rate;
   3 : char[] text = { 'J', 'a', 'v', 'a' };
   4 : String name;
   5 : age = 30
   6 : interest_rate = 4.0F
   7 : age += 10
   8 : text[1] = 'A'
   9 : text[2] = 'V'
  10 : text[3] = 'A'
  11 : name = "John Doe"
  12 : text
  13 : age++
  14 : age

左栏中的数字唯一标识一个代码段。 您可以使用此数字重新执行一个代码段,列出该代码段,删除(删除)一个代码段,依此类推:

jshell> /12
text
text ==> char[4] { 'J', 'A', 'V', 'A' }

jshell> /list 13

  13 : age++

jshell> /drop 7
|  dropped variable $7

jshell> /list

   1 : int age = 25;
   2 : float interest_rate;
   3 : char[] text = { 'J', 'a', 'v', 'a' };
   4 : String name;
   5 : age = 30
   6 : interest_rate = 4.0F
   8 : text[1] = 'A'
   9 : text[2] = 'V'
  10 : text[3] = 'A'
  11 : name = "John Doe"
  12 : text
  13 : age++
  14 : age
  15 : text

在这里,我们输入/ 12重新执行代码段#12,该代码段输出text的内容。 然后,我们输入/ list 13列出代码段#13,这会增加age 。 接下来,我们输入/ drop 7删除代码段#7(没有age += 10代码段)。 最后,我们输入/ list重新列出所有片段。 请注意,由于/12命令,代码段7已被删除,并且代码段15已添加。

做出决定:if,if-else和switch

决策语句使应用程序可以在多个执行路径之间进行选择。 例如,如果一个销售员本月销售了500件以上的商品,请给该销售员一笔奖金。 另外,如果学生在代数测试中的成绩大于85%,则祝贺学生表现良好; 否则,建议学生努力学习下一个测验。

Java支持ifif-elseswitch决策语句。 此外,Java 12已添加了新的switch表达式功能。

if语句

Java的最简单的决策语句是if语句,它计算布尔表达式并在此表达式的值为true时执行另一个语句。 if语句具有以下语法:

if ( Boolean expression )
   statement

if语句以保留字if开头,并以括号括起来的布尔表达式继续,然后在布尔表达式评估为true时执行该语句。

以下示例演示了if语句。 如果age变量的值等于或大于55, if执行System.out.println(...); 输出消息:

if (age >= 55)
   System.out.println("You are or were eligible for early retirement.");

许多人更喜欢将if语句之后的任何简单语句括在花括号中,从而将其有效地转换为等效的复合语句:

if (age >= 55)
{
   System.out.println("You are or were eligible for early retirement.");
}

尽管括号清楚了if语句正在执行的操作,但我认为缩进提供了这种清晰度,并且括号不是必需的。

试验if语句

让我们使用jshell尝试这个示例。 重新启动jshell ,然后引入一个age变量(类型为int ),该变量已初始化为55

jshell> int age = 55

接下来,输入第一个示例if语句(主体周围没有花括号):

jshell> if (age >= 55)
   ...>    System.out.println("You are or were eligible for early retirement.");

You are or were eligible for early retirement.

jshell>

请注意,当您输入多行代码段时, jshell>提示将更改为...>继续提示。 在最后一个代码段行之后按Enter键会使jshell立即执行该代码段。

执行/ list以列出所有片段。 我观察到if语句片段在我的会话中分配了2 。 执行/ 2会使jshell列出并执行此代码段,并输出相同的消息。

现在,假设您将25分配给age ,然后重新执行/ 2 (或会话中的等效代码段编号)。 这次,您不应在输出中观察到该消息。

if-else语句

if-else语句计算布尔表达式并执行一条语句。 执行的语句取决于表达式是真还是假。 这是if-else语句的语法:

if ( Boolean expression )
   statement1
else
   statement2

if-else语句类似于if语句,但是它包含保留字 else ,后跟一个在布尔表达式为false时要执行的语句。

下面的示例演示了if-else语句,该语句告诉不到55岁的某人还有多少年才提前退休:

if (age >= 55)
   System.out.println("You are or were eligible for early retirement.");
else
   System.out.println("You have " + (55 - age) + " years to go until early retirement.");

条件运算符与if-else

条件运算符?: :)与if-else语句相似。 但是,该运算符不能用于执行替代语句。 相反,它只能返回相同类型的两个值之一。 (条件运算符有时也称为三元运算符。)

链接if-else语句

Java使您可以将多个if-else语句链接在一起,以解决需要选择多个语句之一来执行的情况:

if ( Boolean expression1 )
   statement1
else
if ( Boolean expression2 )
   statement2
else
   ...
else
   statementN

只要当前的if语句的布尔表达式的值为false,就可以通过执行后续的if-else语句来进行链接。 考虑一个示范:

if (temperature < 0.0)
   System.out.println("freezing");
else
if (temperature > 100.0)
   System.out.println("boiling");
else
   System.out.println("normal");

第一条if-else语句确定temperature的值是否为负。 如果是这样,它将执行System.out.println("freezing"); 。 如果没有,它将执行第二条if-else语句。

第二条if-else语句确定temperature的值是否大于100。如果是,则执行System.out.println("boiling"); 。 否则,它执行System.out.println("normal");

悬而未决的问题

如果将ifif-else一起使用,并且源代码没有正确缩进,那么很难确定哪个ifelse关联。 您可以在下面的代码中看到问题:

int x = 0;
int y = 2;
if (x > 0)
   if (y > 0)
      System.out.println("x > 0 and y > 0");
else
   System.out.println("x <= 0");

您可能希望看到x <= 0作为此代码的输出,但是它永远不会发生。 而是什么也不会输出。 问题是else与其最接近的if匹配,即if (y > 0) 。 重新格式化代码可以使事情更加清楚:

int x = 0;
int y = 2;
if (x > 0)
   if (y > 0)
      System.out.println("x > 0 and y > 0");
   else
      System.out.println("x <= 0");

在这里,它比if (y > 0) ... else ... if-else语句在if (x > 0)语句之后更清晰。 为了符合上一个示例的意图,您需要在if (y > 0)及其后续语句周围引入花括号字符。 本质上, if (x > 0) ,则将跟随一个块:

int x = 0;
int y = 2;
if (x > 0)
{
   if (y > 0)
      System.out.println("x > 0 and y > 0");
}
else
   System.out.println("x <= 0");

因为x > 0计算结果为false,所以System.out.println("x <= 0"); 执行。 else保留字显然与if (x > 0)匹配。

切换语句

当您需要在多个执行路径之间进行选择时, switch语句提供了比链接更有效的替代方法。 看一下switch语句:

switch ( selector expression )
{
   case value1 : statement1 [break;]
   case value2 : statement2 [break;]
   ...
   case valueN : statementN [break;]
   [default: statement ]
}

switch语句以保留字switch开始,并以选择器表达式继续,该选择器表达式选择要执行的后续情况之一或默认情况。 选择器表达式的结果为整数,字符或字符串。

开关和枚举常量

选择器表达式也可以求值为一个enum常量。 我将在以后的教程中介绍enum

每个案例都标识要执行的语句。 大小写以保留字case和一个标记大小写的值开头。 继冒号( : )字符来执行该语句。 该语句可以可选地跟在break;后面break; ,后执行转移到第一条语句switch 。 如果没有大小写标签与选择器表达式的值匹配,则将执行以保留字default开头的可选默认大小写。

以下是一个switch语句,用于确定整数值是偶数还是奇数(通过使用余数运算符)。 然后,通过标签与其余部分匹配的情况输出适当的消息:

int i = 27;
switch (i % 2)
{
   case 0: System.out.println("even");
           break;

   case 1: System.out.println("odd");
}

翻译自: https://www.infoworld.com/article/2941281/java-101-deciding-and-iterating-with-java-statements.html

java迭代循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值