逻辑控制(Java语言)
前言
所有的代码都是用逻辑结构进行控制的,逻辑控制包括:顺序结构,分支结构,循环结构。我们在C语言已经系统学习过了,这次的Java我们会从Java的角度进行了解。
顺序结构
顺序结构是最简单的逻辑结构,是每个代码中都会有的,举个例子:
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
}
打印结果为:1,2,3,4,如果将前后位置进行交换,那么结果也会发生相应的交换,比如:
public static void main(String[] args) {
System.out.println(1);
System.out.println(3);
System.out.println(2);
System.out.println(4);
}
那么打印结果为:1,3,2,4,顺序结果也就是按照代码的顺序进行编译运行,当然我们也可以通过分支,循环来改变结果运行的顺序。
分支结构(选择语句)
if()语句
if()语句表达式中包含三种情况——单分支,双分支,多分支。
单分支
形式:
if(布尔类型表达式){
条件满足执行代码;
}
双分支
形式:
if(布尔类型表达式1){
条件满足执行代码1;
}else{
条件代码执行代码2;
}
多分支
if(布尔类型表达式1){
条件满足执行代码1;
}else if(布尔类型表达式2){
条件满足执行代码2;
}else{
条件满足执行代码3;
}
注意事项1——悬垂else
我们来看一个例子:
public static void main(String[] args) {
int x=10;
int y=10;
if(x==10)
if(y==10)
System.out.println("aaa");
else
System.out.println("bbb");
}
从代码的结构上来看,我们可以看到,else是跟第一个if(x==10)对齐的,但是真正意义上else是if(y==10)的else,我们需要知道else并不是跟if对齐就是这个if的else,真正意义上是与谁靠的近,就是谁的。那么我们如何避免此类问题呢?这就需要我们养成无论何时,任何一行代码,需要加上括号就需要写上,不要为了方便而省略,往往带来的不是方便,而是bug,我们加上括号不仅能增加阅读性,对于后期的维护更是方便。
所以正确的代码应该是这样的:
public static void main(String[] args) {
int x=10;
int y=10;
if(x==10) {
if (y == 10)
System.out.println("aaa");
}
else
System.out.println("bbb");
}
注意事项2——代码风格
// 风格1
int x = 10;
if (x == 10) {
// 满足条件
} else {
// 不满足条件
}
// 风格2
int x = 10;
if (x == 10)
{
// 满足条件
}
else
{
// 不满足条件
}
C语言中我们一般使用风格2的格式来编写代码。虽然两种方式都是合法的, 但是 Java 中更推荐使用风格1, { 放在 if / else 同一行。
注意事项3——分号问题
int x = 20;
if (x == 10); {
System.out.println("hehe");
}
这段代码中我们在if()后加上了;导致if()语句只是一个语句,所以不管发生什么if()后面都会执行。所以这段代码打印结果为“hehe”。这也是我们采用风格1写这类代码的好处,这样写就能够避免在if()语句后面加上“;”,而是加上“{”。
switch()语句
举个例子:
public static void main(String[] args) {
int a=10;
switch (a){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
default:
System.out.println("参数不匹配");
break;
}
}
关于switch语句在C语言中注重讲过,但是有几点需要注意:
注意事项1——break 不要遗漏, 否则会失去 “多分支选择” 的效果
举个例子:
public static void main(String[] args) {
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
// break;
case 2:
System.out.println("星期二");
break;
}
}
我们将case1中的break省略,因此case1打印完星期一后,并没有跳出,而是继续往下,进入case2部分,因此仍要打印星期二。
因此,我们发现, 不写 break 的时候, case 语句会依次向下执行, 从而失去了多分支的效果。
注意事项2——switch 中的值只能是 整数|枚举|字符|字符串
这一点也跟C语言非常的不一样,C语言中我们知道switch(),括号中只能使用整型,但是switch不一样,switch只能用整型(long不行),枚举,字符,字符串。也就是说常见的八大基本类型中,long,double,boolean,float都不行。
注意事项3——switch 不能表达复杂的条件
什么叫复杂的条件?举个例子:
public static void main(String[] args) {
int num = 15;
switch (num > 10 && num < 20){
case true:
System.out.println("hehe");
case false:
System.out.println("haha");
default:
System.out.println("heihei");
}
}
我们发现会报错,原因就在于switch()的括号中表达式过于复杂。因此我们在我们能不是用switch语句就尽量不使用。
循环结构
while循环
基本语法形式:
while(循环条件){
循环语句;
}
我们来看一个简单的计算1到10的和的例子:
public static void main(String[] args) {
int i = 1;
int sum = 0;
while (i <= 10) {
sum = sum + i;
i++;
}
System.out.println(sum);
}
注意事项
- 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }。
- 和 if 类似, while 后面的 { 建议和 while 写在同一行。
- 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行。
break
break的功能是让循环提前结束。举个例子:
打印1到10的第一个被3整除的数:
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
if (i % 3 == 0) {
System.out.println(i);
break;
}
i++;
}
}
我们可以看到当i=3时,此时满足了i % 3 == 0这个条件,那么,打印i的值,break跳出循环,结束程序,如果没有break,那么会继续i++,知道i>10while循环才会停止。
continue
continue的功能是跳过这次循环,立即进入下一次循环。举个例子:
打印1到10被3整除的数:
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
if (i % 3 != 0) {
i++;
continue;
}
System.out.println(i);
i++;
}
}
当i对3取余不为0时,先i++,在跳过此次循环,(如果先continue,再i++,那么在continue后,i++并不会执行,直接跳过此次循环),如果i对3取余等于0并不会进入if()条件中,而是打印i的值,在i++。
for()循环
基本语法形式:
for(表达式1;表达式2;表达式3){
循环体;
}
我们来看一个简单求1到100的for循环:
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
}
注意事项:
- 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }。
- 和 if 类似, for 后面的 { 建议和 while 写在同一行。
- 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行。
do while()循环
基本语法形式:
do{
循环语句;
}while(循环条件);
我们来看一个简单的计算1到10的和的例子:
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
sum = sum + i;
i++;
} while (i <= 10);
System.out.println(sum);
}
注意事项:
- do while 循环最后的分号不要忘记。
- 一般 do while 很少用到, 更推荐使用 for 和 while。
关于逻辑控制的部分Java语言所设计的就是这么多了,大部分我们在C语言中已经接触过了,如果有什么建议或者问题欢迎大家私信或者留言,谢谢各位。