java迭代循环
Java应用程序在语句的上下文中评估表达式,这些语句用于诸如声明变量,做出决定或遍历语句之类的任务。 语句可以表示为简单或复合语句:
- 简单的语句是用于执行任务的单个独立指令。 它必须以分号(
;
)结束。 - 复合语句是一系列简单和其他复合语句,位于开括号和闭括号字符(
{
和}
)之间,它们界定了复合语句的边界。 复合语句可以为空,将在简单语句出现的任何地方出现,或者称为block 。 复合语句不以分号终止。
在本教程中,您将学习如何在Java程序中使用语句。 您可以使用诸如if
, if-else
, switch
, for
和while
语句来声明变量和指定表达式,进行决策,对语句进行迭代(或循环),中断并继续迭代等等。 我将为将来的Java 101教程保留一些更特殊的语句,例如用于从被调用方法返回值和引发异常的语句。
在Java 12中切换表达式
请注意,本教程已针对Java 12进行了更新,其中包括switch
表达式的简短介绍。
变量声明和赋值
之前,我已经介绍了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支持if
, if-else
和switch
决策语句。 此外,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");
。
悬而未决的问题
如果将if
和if-else
一起使用,并且源代码没有正确缩进,那么很难确定哪个if
与else
关联。 您可以在下面的代码中看到问题:
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迭代循环