Java 选择与循环结构详细教程
一、选择结构(6种)
1、单分支if语句
if(condition){
statements;
}
如果布尔表达式condition的值为真,则执行statements语句,否则转到if结构后的语句执行。
例1
package com.baidu.czy; import java.util.Scanner; public class CheckNumber { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = sc.nextInt(); if (num % 5 == 0 && num % 6 == 0){ System.out.println(num + "能被5和6同时整除"); } if (num % 5 == 0 || num % 6 == 0){ System.out.println(num + "能被5或6整除"); } if (num % 2 == 0 ^ num % 6 == 0){ System.out.println(num + "只能被5或6整除"); } } }
2、双分支if-else语句
例2
import java.util.Scanner; public class AdditionQuiz { public static void main(String[] args) { int number1 = (int)(Math.random()*10); // [0.0-1.0) int number2 = (int)(Math.random()*10); System.err.print(number1 + "+" + number2 +"="); Scanner input = new Scanner(System.in); int answer = input.nextInt(); if(answer ==(number1+number2)){ System.out.println("恭喜你,答对了!"); }else{ System.out.println("很遗憾,答错了!"); System.out.println(number1 +"+"+number2 +"="+(number1+number2)); } } }
3、嵌套的if语句和多分支的if-else语句
例3
package com.baidu.czy; import java.util.Scanner; /* 1、成员变量:无需初始化。 成员变量无需初始化,系统在创建实例的过程中默认初始化。 补充:以final修饰的成员变量。必须显性的初始化赋值。 2、 方法里面的形参变量: 无需初始化。 Java类方法,属于按值传递机制,调用方法的时候,完成参数的传递,相当形参被初始化。 3、局部变量:必须初始化。 与成员变量不同,局部变量必须显示初始化,才能够使用。 */ public class ScoreLevel { public static void main(String[] args) { String level = null; Scanner sc = new Scanner(System.in); System.out.print("请输入成绩:"); double score = sc.nextDouble(); if (score > 100 || score < 0){ System.out.println("输入成绩不正确。"); }else if (score >= 90){ level = "优秀"; }else if (score >= 80){ level = "良好"; }else if (score >= 70){ level = "中等"; }else if (score >= 60){ level = " 及格"; }else { level = "不及格"; } System.out.println("你的成绩等级为:" + level); } }
4、条件运算符
条件运算符是Java唯一的三元运算符
condition ? expression1 : expression2
如果condition为真,则执行expression1,否则执行expression2
5、switch语句结构
switch(expression){
case value1:
statements [break];
case value2:
statements [break];
. . . . . . . . ..
[default:
statements ]
}
注意:
(1)expression是一个表达式,它的值必须是byte、short、int、char、String、enum,同时expression类型必须与value的类型相匹配。
(2)break语句是可选项,计算expression的值与case的值进行匹配,若匹配,则执行case子句后面的语句,直到遇到break语句为止;
若都不匹配,则执行default语句块;若既都不匹配又没有default语句,则直接跳出switch结构。
例4
package com.baidu.czy; import java.util.Scanner; public class SwitchDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入年份:"); int year = sc.nextInt(); System.out.println("请输入月份:"); int month = sc.nextInt(); int numDays = 0; switch (month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9:case 11: numDays = 30; break; case 2: if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){ numDays = 29; }else { numDays = 28; } break; default: System.out.println("月份非法"); break; } System.out.println("该月的天数为:"+numDays); } }
二、循环结构(4种)
1、while循环(“当循环”)
一般用在循环次数不确定的情况下
例
package com.baidu.czy; import java.util.Scanner; public class GuessNumber { public static void main(String[] args) { //随机产生100~200的数 int magic = (int)(100 + Math.random() * 101); Scanner sc = new Scanner(System.in); System.out.println("请输入你猜的数:"); int guess = sc.nextInt(); while (guess != magic){ if(guess > magic){ System.out.println("您猜大了"); }else { System.out.println("您猜小了"); } //进入到下一次 guess = sc.nextInt(); } System.out.println("恭喜你,答对了!\n该数是:"+magic); } }
2、do-while循环(“直到型”循环)
与while循环的区别是,do-while至少执行一次循环体。
例
import java.util.Scanner; public class DoWhileDemo { public static void main(String[] args) { double sum = 0,avg = 0; int n = 0; double number; Scanner input = new Scanner(System.in); do{ System.out.print("请输入一个数(输0结束):"); number = input.nextDouble(); if(number != 0){ sum = sum + number; n = n + 1; } }while(number!=0); avg = sum / n; System.out.println("sum = "+ sum); System.out.println("avg = "+ avg); } }
3、for循环
一般用在循环次数固定的情况下
例 打印九九乘法表
public class NineTable { public static void main(String[] args) { for(int i = 1; i < 10; i++){ for(int j = 1; j <=i; j++){ System.out.print(i +"*"+j + "="+i*j + " "); } System.out.println(); } } }
注意:for循环的一部分或全部可为空,但是分号不能省略。
如 for( ; ; ){
}
4、增强的for循环
主要用于对数组和集合元素的迭代
一般格式
for(type identifier: expression){
//循环体
}
该循环的含义:对expression(数组或集合)中的每个元素identifier,执行一次循环体中的语句。
type指数组或集合中的元素类型;expression必须是一个数组或集合的对象。
例如:用增强的 for循环实现求数组marks中各元素的和
double sum = 0;
for(double score:marks){
sum = sum + score;
}
使用增强型for循环的局限性:只能顺序访问数组或集合的元素。