🐇控制语句
2021-3-3
| 2023-8-3
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 

输入和输出

输出

使用System.out.println()来向屏幕输出一些内容,printlnprint line的缩写,表示输出并换行。如果不想换行,可以用print()
 
格式化输出
如果要把数据显示成特定的格式,就需要格式化输出。格式化输出使用System.out.printf(),通过占位符%?把后面的参数格式化成指定格式:
notion image
 

输入

和输出相比,输入要复杂得多,看一个从控制台读取一个字符串和一个整数的例子:
首先通过import语句导入java.util.Scanner,然后创建Scanner对象并传入System.inSystem.out代表标准输出流,而System.in代表标准输入流。直接使用System.in读取用户输入虽然是可以的,但需要更复杂的代码,而通过Scanner就可以简化后续的代码。
有了Scanner对象后,要读取用户输入的字符串,使用scanner.nextLine(),要读取用户输入的整数,使用scanner.nextInt()Scanner会自动转换数据类型,因此不必手动转换。
 

选择

if语句

if语句的基本语法是:
 
if语句块只有一行语句时,可以省略花括号{}:
 
if语句还可以编写一个else { ... },当条件判断为false时,将执行else的语句块:
 
还可以用多个if ... else if ...串联。例如:
 
前面讲过浮点数在计算机中常常无法精确表示,计算可能出现误差,需要利用差值小于某个临界值来判断:
 
判断引用类型相等
判断值类型的变量是否相等,可以使用==运算符。
判断引用类型的变量时==表示“引用是否相等”,或者说,是否指向同一个对象
下面的两个String类型,它们的内容是相同的,但是分别指向不同的对象,用==判断,结果为false
 
要判断引用类型的变量内容是否相等,必须使用equals()方法:
 
执行语句s1.equals(s2)时,如果s1null,会报NullPointerException ,要避免错误可以用&&
 

switch多重选择

switch语句根据switch (表达式)计算的结果,跳转到匹配的case结果,然后继续执行后续语句,直到遇到break结束执行:
 
注意case语句没有花括号{},而且,case语句具有“穿透性”,漏写break将导致意想不到的结果:
从匹配到case 2开始,后续语句将全部执行,直到遇到break语句,因此不要忘记写break
 
如果有几个case语句执行的是同一组语句块,可以这么写:
 
使用switch语句时,只要保证有breakcase的顺序不影响程序逻辑:
 
switch语句还可以匹配字符串。字符串匹配时,是比较“内容相等”
 
Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句:
不要写break语句,因为新语法只会执行匹配的语句,没有穿透效应
 
使用新的switch语法,不但不需要break,还可以直接返回值
 
yield
Java 14开始,switch语句正式升级为表达式,不再需要break,并且允许使用yield返回值。
如果需要复杂的语句,也可以写很多语句,放到{...}里,用yield返回一个值作为switch语句的返回值:
 

循环语句

while循环

while条件循环的基本用法是:
while循环在每次循环开始前,首先判断条件是否成立。如果计算结果为true,就把循环体内的语句执行一遍,如果计算结果为false,那就直接跳到while循环的末尾,继续往下执行。
 
如果循环条件永远满足,那这个循环就变成了死循环。
如果循环条件的逻辑写得有问题,也会造成意料之外的结果:
表面上看,上面的while循环是一个死循环,但是,Java的int类型有最大值,达到最大值后,再加1会变成负数,结果,意外退出了while循环。
 

do while循环

while循环是先判断循环条件,再执行循环;而do while循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出:
 
do while循环会至少循环一次
 

for循环

for循环的用法是:
for循环的初始化计数器总是会被执行,并且for循环也可能循环0次。
千万不要在循环体内修改计数器!在循环体中修改计数器常常导致莫名其妙的逻辑错误
 
使用for循环时,计数器变量i要尽量定义在for循环中:
如果变量i定义在for循环外:
退出for循环后,变量i仍然可以被访问,这就破坏了变量应该把访问范围缩到最小的原则。
 
 
for循环还可以缺少初始化语句、循环条件和每次循环更新语句,例如:
通常不推荐这样写
 
 

for each循环

for循环经常用来遍历数组,通过计数器可以根据索引来访问数组的每个元素:
但是,很多时候实际上真正想访问的是数组每个元素的值,Java提供了for each循环,能更简单地遍历数组:
for循环相比,for each循环的变量n不再是计数器,而是直接对应到数组的每个元素。
for each循环的写法更简洁,但是,for each循环无法指定遍历顺序,也无法获取数组的索引。
除了数组外,for each循环能够遍历所有“可迭代”的数据类型
 

break和continue

break会跳出当前循环,也就是整个循环都不会执行了;continue则是提前结束本次循环,直接继续执行下次循环。
break语句通常都是配合if语句使用:
 
 
  • Java
  • 命令行参数方法
    目录