JAVA的基本控制结构
在Java语言中有三种基本控制结构:
- 顺序结构
- 选择结构
- 循环结构
顺序结构
顺序结构是JAVA语言的基本结构,也是最简单的算法结构。程序按照从上到下的顺序一行一行的执行,中间没有任何判断和跳转。
例如:
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要输出的值");
String str=scanner.nextLine();
System.out.println("输出:"+str);
scanner.close();
选择结构
选择结构根据条件不同执行不同的语句,主要有if……else和switch—case两种语句。
if语句
在实际使用时,常常将if语句划为单选择结构、双选择结构、多选择结构以及嵌套使用四种情况。
单选择结构:
语法格式:
if(布尔表达式)
{
布尔表达式为true时执行的语句
}
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要输出的值");
String str=scanner.nextLine();
// if单选择语句
if (str.equals("hello")){
System.out.println(str);
}
双选择结构:
语法格式:
if(布尔表达式)
{
布尔表达式为true时执行的语句
}
else{
布尔表达式为false时执行的语句
}
//考试成绩大于60是及格,小于60为不及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩");
int i=scanner.nextInt();
if(i>=60){
System.out.println("成绩及格");
}else{
System.out.println("成绩不及格");
}
scanner.close();
if多选择结构:
语法格式:
if(布尔表达式1)
{
布尔表达式为true时执行的语句
}else if(布尔表达式2){
布尔表达式2为true时执行的语句
}else if(布尔表达式3){
布尔表达式3为true时执行的语句
}else if(布尔表达式4){
布尔表达式4为true时执行的语句
}……
这里要注意的是if语句在进行判断时的优先级,布尔表达式1优先其他表达式先进行判断,布尔表达式2优先表达式3,4……进行判断,以此类推,布尔表达式越靠后的越晚判断。
//考试成绩60~80是及格,80~90为良好,90~100为优秀,小于60为不及格,
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩");
int i=scanner.nextInt();
if(i>=90){
System.out.println("成绩优秀");
}else if (i>=80){
System.out.println("成绩良好");
}else if (i>=60){
System.out.println("成绩及格");
}else {
System.out.println("成绩不及格");
}
scanner.close();
if语句的嵌套
if语句的嵌套就是在一个if语句或者else if语句中再次使用一个或多个if语句。
语法格式:
if(布尔表达式1)
{
if(布尔表达式2){
语句;
}
}
int age=18;
int weigth=70;
if(age>=18){
if(weigth>60){
System.out.println("合格");
}
}
switch—case多选择语句
多选择结构另一个实现方式就是switch-case语句,switch-case语句判断一个变量与一系列常量中某个值是否相等,每一个常量都是一个分支。
语法格式:
switch(表达式){
case 常量1:
语句1;
// break;
case 常量2:
语句2;
// break;
… …
case 常量N:
语句N;
// break;
default:
语句;
// break;
}
注意点:
switch中的常量类型可以是byte、short、int、long、char、string。同时,case后面的类型必须为字符串常量或字面量。
default后语句作用为所有的case后的值钧于表达式的值不匹配时执行。
在switch语句中,在每一个case语句结束的后面都可以添加break,作用为当前语句运行结束后退出switch语句。
char c='c';
switch (c){
case 'A': System.out.println("成绩优秀");break;
case 'B': System.out.println("成绩良好");break;
case 'C': System.out.println("成绩及格");break;
case 'D': System.out.println("成绩不及格");break;
}
循环结构
在Java语言中,有三种循环结构:while循环,do-while循环和for循环。
while循环
语法结构:
while(布尔表达式)
{
循环内容
}
布尔表达式的值为true时,循环就会一直执行下去。
只有在极少数情况下要循环一直执行,大多数情况,我们都会人循环停止。因此我们需要一个让表达式为false的方式结束循环。
在通常情况下,让表达式一直为true会造成无线循环(死循环)这会造成程序卡死和崩溃。所以,在编写程序时要尽量避免出现死循环
例如:
//计算1+2+3+4...+100
int i=0;
int sum=0;
while(i<=100){
sum+=i;
i++;
}
System.out.println(sum);
do-while
语法格式:
do{
循环语句
}while(布尔表达式);
相对于while语句,do-while语句无论布尔表达式的值是什么,都会执行一次循环语句暨循环至少执行一次。并且do-while语句会先执行循环语句在判断,while语句先判断在执行循环语句
这里我们举个例子对比以下while和do-while的区别
int i = 0;
while(i<0){
System.out.println(i);
i++;
}
System.out.println("-------------------");
do {
System.out.println(i);
i++;
}while(i<0);
运行结果:
从运行结果中我们可以看到,while循环体没有执行,而do-while循环体执行了一次。
for循环
语法格式:
for(初始化;布尔表达式;更新)
{
循环体;
}
for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构。for循环的执行次数是在执行前就确定的。
这里只介绍简单的for循环应用,不涉及数组和对象。
关于for循环执行过程的说明:
- 初始化:最先执行的初始化步骤,可以声明一种类型,也可以一个或多个循环控制变量,甚至可以是一个空语句。此部分只在开始进入for循环时执行一次。
- 布尔表达式:用于判断是否执行循环体。布尔表达式为true时执行循环体,false退出循环。
- 更新:执行一次循环后,更行循环控制变量(迭代因子控制循环变量增减)
- 在次检查布尔表达式循环执行上面过程。
例如:
//打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i + "*" + j + "=" + (j * i)+"\t");
}
System.out.println();
}
}
for循环扩展
语法格式:
for(声明类型:表达式){
循环体;
}
该用法主要用于数组和集合。
声明类型:声明新的局部变量,该变量类型必须数组元素的类型匹配,其作用域限定在循环体内。
表达式:表达式的值是要访问的数组名也可以是返回值为数组的方法。
例如:
int[] number={10,20,30,40};
for(int x:number){
System.out.println(x);
}
运行结果:
关于数组和集合的for循环用法还有很多,这里就不过多介绍了。
break、continue、goto
break:在任何循环体中,都可以使用break控制循环的流程。用于退出当前循环体,不执行循环体接下来的部分。在switch中也常常使用。
continue:在循环体中,终止某次循环过程。即跳过接下来循环体的内容,执行下一次循环体判断过程。
goto:
goto关键字很早就在程序设计语言中出现。尽管goto是Java一个保留字,但未在语言中正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们依然能看出一些goto的影子。至于goto的用法,这里也不做介绍。