typora-copy-images-to: 笔记中有关截图
仅作为Java学习过程中知识点的记录
目录
待更新。。。
Cha_03 控制语句
3.1 选择结构
3.1.1 if 语句(分支语句)
if 语句是分支语句,也叫条件语句。
1. 语法结构
(1)if 结构
if(布尔表达式){
Java语句;
Java语句;
}
(2)if-else 结构
if(布尔表达式){
Java语句1;
}else{
Java语句2;
}
//如果表达式值为true,执行语句1,否则实行语句2
(3)if-else if 结构
if(布尔表达式1){
Java语句1;//当表达式1的值为true时,执行语句1;否则判断表达式2
}else if(布尔表达式2){
Java语句2;//当表达式2的值为true时,执行语句2;否则判断表达式3
}else if(布尔表达式3){
Java语句3;//当表达式3的值为true时,执行语句3;否则不执行
}
(3)if-else if-else 结构
if(布尔表达式1){
Java语句1;//当表达式1的值为true时,执行语句1;否则判断表达式2
}else if(布尔表达式2){
Java语句2;//当表达式2的值为true时,执行语句2;否则判断表达式3
}else if(布尔表达式3)
···
else{
Java语句n;//当前面的表达式的值都为false时,执行语句n;
}
- 当每个分支中的语句只有1条时,花括号“{ }”可以省略。
- 控制语句和控制语句之间是可以嵌套的。
2. 代码示例
Activities at Lake LazyDays
你在Lake LazyDays度假村的工作是按照天气状况给客人提供活动建议。以下是一个活动列表:
temp >= 80: swimming;
60 <= temp < 80: tennis;
40 <= temp < 60: golf;
temp < 40: skiing.1、编写一段程序,提示用户输入一个气温值,然后打印出适合该气温的活动。提示:使用if-else语句,并确保你的条件设定不必过于复杂。
2、修改程序,在temp>95或者temp < 20的情况下,打印“Visit our shops!"。提示:在条件表达式中使用布尔运算符。
import java.util.Scanner;
public class LazyDays{
public static void main(String[] args){
//创建一个Scanner对象scan,用以获取用户从键盘输入的数据
Scanner scan = new Scanner(System.in);
//声明一个int型变量temp
int temp;
while (scan.hasNextInt( )) {
//提示用户输入今日气温
System.out.println("请输入今日气温:");
//将用户输入的气温赋值给temp
temp = scan.nextInt( );
//用if语句判断当日气温,根据不同气温输出不同的游玩建议
if (temp > 95 || temp < 20) {
//当气温temp高于95或低于20时,输出"Visit our shoops!"
System.out.println("Visit our shops!");
} else if (temp >= 80) {
//当温度temp不低于80时,输出"swimming"
System.out.println("swimming");
} else if (60 <= temp && temp < 80) {
//若temp不低于60时,输出"tennis"
System.out.println("tennis");
} else if (40 <= temp && temp < 60) {
//若temp不低于60时,输出"golf",否则输出"skiing"
System.out.println("golf");
} else {
//若以上条件都不满足,输出"skiing"
System.out.println("skiing");
}
}
scan.close( );
}
}
3.1.2 switch 语句
1. 语法格式
switch (表达式){
case 值1:
语句块1;
break;//中断当前的switch语句
//当表达式的值为值2或值3时,执行语句块2
case 值2:
case 值3:
语句块2;
break;
case ···:
//当以上case语句的值都与表达式的值不相等时,执行false语句
default:
语句块n;
}
注意:
(1)switch语句可以拥有多个case语句;
(2)表达式的值可以是整型或字符串型等(cahr、byte、int、short、boolean、String)或对应的包装类型;
(3)当表达式的值与case的值相等时,执行该case分支的语句块,并往下执行,直到遇到第一个break结束;
(4)如果没有break语句,程序一直往下执行,直到出现第一个break结束,或着执行到default分支结束。
(5)switch可以包含零个或一个default语句,一般default语句放在最后。
2. 代码示例
将学生的英文级别转换为中文等级分类:A为优秀,B和C为良好,D为及格,F为未通过,如果级别不再这个范围内将做超出范围提示。
import java.util.Scanner;
public class Grade {
public static void main ( String [ ] args ) {
// 创建一个Scanner对象scan,用以获取用户从键盘输入的数据
Scanner scan = new Scanner(System.in);
// 声明一个String型变量grade。
String grade;
while (scan.hasNext( )) {
// 提示用户输入层级等级
System.out.println("请输入你的成绩等级:");
// 将输入的学生成绩的英文等级赋值给grade中
grade = scan.next( );
// 用switch语句,根据不同气温输出不同的游玩建议
switch (grade) {
case "A" :
System.out.println("优秀");
break;
case "B" :
case "C" :
System.out.println("良好");
break;
case "D" :
System.out.println("及格");
break;
case "F" :
System.out.println("未通过");
break;
default :
System.out.println("不在A~F范围中!");
}
}
scan.close( );
}
}
3.1.3 选择结构综合实例
1. 题目
Rock, Paper, Scissors
程序Rock.java是石头剪子布游戏的一个框架。将该程序保存至本地目录,按照提示补充程序语句。该程序允许用户输入一个项目,计算机随机产生一个项目,对两个项目对比,给出胜负结果。比如,程序可能以以下方式运行:
用户可以输入R, P, S或者r, p, s来表示石头,布,剪刀三个项目。用户输入的项目保存在字符串变量中,以便于大小写的转换。
使用一个switch语句将一个随机整数转换为游戏中计算机给出的项目。
很多情况下程序需要生成一定范围内的一个随机数。Java类库中的Random类为程序员提供了这样的功能,能够同时生成一系列的随机数。以下变量声明Random类型的变量generator,并使用new操作符进行初始化:
Random generator = new Random();
generator对象能够生成整型或者浮点型的随机数字,需要使用到nextInt方法或者nextFloat方法。nextInt()返回一个任意的整型随机数字,而nextInt(n)返回一个在0至n-1之间的随机整数。nextFloat()和nextDouble()返回0至1之间的一个浮点数。
假设需要生成30至99之间的整数,可以采用以下的方法:
- 使用nextInt():Math.abs(generator.nextInt())%70 + 30;
- 使用nextInt(70): generator.nextInt(70)+30;
- 使用nexFloat: (int)(generator.nextFloat()*70) + 30
加30,表示从30开始,一直到99,着100个数里随机取值。随机数默认从0开始随机取值。完成以下程序。该程序用于生成随机数字。注意需要把java.util.Random类导入程序。
2. 代码
import java.util.Scanner;
import java.util.Random;
public class Rock{
public static void main(String[] args){
//声明变量
String personPlay;//表示用户输入的值
String computerPlay = "";//表示计算机出的值
int randomInt;//随机数
//创建对象
Scanner scan = new Scanner(System.in);
Random random = new Random();
//提示用户输入石头、剪刀或布
System.out.print("Enter your play: (R, P or S): ");
//开始游戏
while(scan.hasNext()){
personPlay = scan.next().toUpperCase();
randomInt = random.nextInt(3);
switch(randomInt){
case 0:
computerPlay = "R";
break;
case 1:
computerPlay = "S";
break;
case 2:
computerPlay = "P";
break;
}
if(personPlay.equals(computerPlay)){
System.out.println("It's a tie.");
}else if(personPlay.equals("R")){
if(computerPlay.equals("P")){
System.out.println("Paper covered stone.\n"
+ "Compueter wins, you failed!");
}else{
System.out.println("Rock crushes scissors.\n"
+ "You win!");
}
}else if(personPlay.equals("S")){
if(computerPlay.equals("R")){
System.out.println("Rock crushes scissors.\n"
+ "Compueter wins, you failed!");
}else{
System.out.println("Sissors cut paper.\n"
+ "You win!");
}
}else if(personPlay.equals("P")){
if(computerPlay.equals("S")){
System.out.println("Sissors cut paper.\n"
+ "Compueter wins, you failed!");
}else{
System.out.println("Paper covered stone.\n"
+ "You win!");
}
}else if(personPlay.equals("E")){
//游戏结束
System.out.println("Game over! \n"
+ "Thank for playing!");
return;
}else {
//判断用户输错,提示重新输入正确字符
System.out.println("Error! Please enter: \"R\", \"S\" or \"P\".");
}
System.out.print("\nEnter your play: (R, P or S): ");
}
scan.close();
}
}
3. 程序运行结果
3.2 循环语句
3.2.1 while 循环
1. 语法格式
while(布尔表达式){
语句块;
}
当满足while的循环条件时,执行while里的语句块。同样,只有一条语句时可以不加“{ }”,为方便阅读,建议加“{}”。
2. 代码示例
3.2.2 do-while 循环
1. 语法格式
do{
语句块;
}while(循环条件);
注意:
- 无论是否满足while循环条件,先执行do 语句块,再判断表达式是否满足while条件。
- do-while循环,至少执行一次循环,当条件满足时,do-while循环与while循环的结构一样。
- do-while循环中,while后面有分号
程序陷阱:
double num = 1.0;
while(num!= 0.0){
System.out.println(num);
num -= 0.1;
}
注意:num为浮点类型变量,直接进行四则运算时会出现精度丢失的现象。所以以上程序会进入死循环。要解决这个问题可以给定一个偏差值。
2. 代码示例
程序运行结果示例:
3.2.3 for 循环
1. 语法格式
for(初始值;条件表达式;增值){
语句块;
}
注意:
- 在for循环中,初始值只赋值一次;
- 当满足条件表达式时,执行语句块,并进行增值,然后重新判断是否满足for循环条件。
2. 代码示例
鸡兔同笼问题。一个笼子中有若干只兔子和鸡,共有10个头,32只脚,求兔和鸡的数量。
package ForTest;
public class ChookRabbit{
public static void main(String[] args){
int head = 10;
int feet = 32;
int sumRabbit;
int sumChook;
for(sumChook = 0; sumChook < 16; sumChook++){
//鸡兔的总数为10
sumRabbit = head - sumChook;
//鸡有两只脚,兔子有四只脚,共有32只脚
if(sumRabbit * 4 + sumChook * 2 == feet){
System.out.println("There are " + sumRabbit
+ " rabbits and " + sumChook
+ " chooks in the cage.");
}
}
}
}
程序运行结果:
3.2.4 for-each 循环
1. 语法格式
for(类型 变量: 数组或集合){
语句块
}
注意:
(1)for-each 循环也称为“增强for循环”。是为了简化集合类、枚举和数组的迭代过程二提出的。
(2)关键字for后面的括号内有两个控制元素,之间用“ : ” 分隔。冒号前为变量及其类型,这里的变量也称为迭代器,在循环体内反复赋值;冒号后为需要遍历的数组或集合。要求,变量的类型需与需要遍历的数组或集合内的元素类型一致。
2. 代码示例
程序运行结果示例:
3.2.5 循环语句综合实例
1. 题目
Factorials
n的阶乘(n!)表示整数从1到n的乘积。比如,4!=123*4=24。另外,0!=1。阶乘不适用于负数。1、编写一段程序,请用户输入一个非负整数,然后打印该整数的阶乘。请使用while循环语句编写程序。请考虑用户输入0的情况。
2、修改程序,检查用户是否输入非负整数。如果输入的负数,则提示用户输入非负整数,并请用户重新输入,直到用户输入非负整数为止。
2. 代码
import java.util.Scanner;
public class Factorials{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n;
int factories;
System.out.println("Please enter a number:");
while(scan.hasNext()){
n = scan.nextInt();
factories = 1;
if(n<0){
//负数没有阶层
System.out.println("Error!");
}else if(n == 0){
//0! = 1
System.out.println(n + "! = 1");
}else{
//输出格式 n! = 1 * 2 * ··· * n = ···
System.out.print(n + "! = 1");
for(int i = 1; i <= n; i++){
//计算阶层
factories *= i;
if(i > 1){
System.out.print(" * " + i);
}
}
//输出最终结果,并换行
System.out.print(" = " + factories + "\n");
}
//提示用户输入数字
System.out.println("Please enter a number:");
}
scan.close();
}
}
3. 程序运行结果
3.3 中断语句
Java中的中断语句包括:return、break和continue,都用于执行循环的结束
3.3.1 return 语句
return语句