第四章 循环结构
课前回顾
1.选择结构都有哪几种?
基本if选择结构、if-else选择结构、嵌套if-else选择结构、多重if-else选择结构、switch选择结构
2.描述逻辑短路
逻辑与短路:在使用逻辑与衔接的多个条件中,如果其中一个条件为假,那么该条件之后的所有条件均得不到执行,从而形成逻辑与短路
逻辑或短路:在使用逻辑与衔接的多个条件中,如果其中一个条件为真,那么该条件之后的所有条件均得不到执行,从而形成逻辑或短路
3.switch选择结构支持哪些数据类型?有无注意事项?
byte int short char String Enum Byte integer Short
需要注意的是,switch选择结构如果使用String,则需要满足JDK必须在JDK 7及以上
第一节 程序调试
1.什么是程序调试?
当程序出现问题时,我们希望程序能够暂停下来,然后通过我们操作使代码逐行执行,观察整个过程中变量的变化是否按照我们设计程序的思维变化,从而找问题并解决问题,这个过程称之为程序调试
2.为什么需要程序调试?
人无完人,考虑问题不可能面面俱到,尤其是在编写复杂程序的时候,如果程序运行出了问题,定位问题就是关键了,要定位问题就需要使用程序调试
3.如何进行程序调试?
首先在有效的代码上下断点
然后以DEBUG模式启动程序
程序启动后,通过操作使程序代码逐行执行,观察变量的值的变化,从而找出问题并解决问题
4.程序调试演示
鼠标移到最左边,左键设置断点
右键空白处点击“Debug”运行,然后按F8逐行执行
这里简述操作,不详述
第二节 循环结构
1.什么是循环?
同样的事情反复做多次
2.为什么要使用循环?
思考如下代码存在什么问题?
public class Example1{
public static void main(String[] args){
System.out.println("Hello World");//1
System.out.println("Hello World");//2
System.out.println("Hello World");//3
System.out.println("Hello World");//4
System.out.println("Hello World");//5
System.out.println("Hello World");//6
System.out.println("Hello World");//7
System.out.println("Hello World");//8
System.out.println("Hello World");//9
System.out.println("Hello World");//10
}
}
重复的编码出现多次,在java中,这样的情况我们称之为代码冗余。那么如何减少这种重复的冗余代码呢?这就需要使用循环结构了
public class Example2{
public static void main(String[] args){
int i = 0;
while(i < 10){
System.out.println("Hello World");
i++;
}
}
}
对比之前的代码,冗余部分已经完全被去掉了,但实现的功能却完全是一样的
3.循环三要素
定义循环变量并赋值
循环条件
循环变量的更新
第三节 while循环
1.语法
while(循环条件){
//循环条件
}
2.执行流程图
3.案例
打印0~9之间的所有整数
4.代码实现
/**
*打印0~9之间的所有整数
*
*/
public class Example3 {
public static void main(String[] args){
//1.定义循环变量并赋值
int i = 0;
//2.添加循环条件
while(i < 10){
System.out.println(i);
//3.循环变量更新
++i;
}
}
}
演示while循环执行过程
断点调试
5.总结
while循环的特征就是先判断,后执行。如果一开始条件就不满足,那么while循环可能一次也不执行
练习
1.在控制台输出100以内的能够被3整除的所有整数
/**
* 1.在控制台输出100以内的能够被3整除的所有整数
*
*/
public class Exercise1 {
public static void main(String[] args){
int i = 0;
while(i < 100){
if(i % 3 == 0){
System.out.println(i);
}
i++;
}
}
}
2.水仙花数是指一个3位数,它每位上的数字的3次幂之和等于它本身(例如:1的三次方+5的三次方+3的三次方=153),
水仙花数的取值范围在100~1000之间。请设计一道程序,求出所有的水仙花数并在控制台打印出来
/**
* 2.水仙花数是指一个3位数,它每位上的数字的3次幂之和等于它本身(例如:1的三次方+5的三次方+3的三次方=153),
* 水仙花数的取值范围在100~1000之间。请设计一道程序,求出所有的水仙花数并在控制台打印出来
*
*/
public class Exercise2 {
public static void main(String[] args){
int i = 100;
while(i < 1000){
int t = i;
int ge = t % 10;
t /= 10;
int shi = t % 10;
t /= 10;
int bai = t;
if(i == ge*ge*ge +shi*shi*shi +bai*bai*bai){
System.out.println(i);
}
i++;
}
}
}
第四节 do-while循环
1.语法
do{
//循环操作
} while(循环条件);
2.执行流程图
3.案例
从控制台录入学生的成绩并计算总成绩,输入0时退出
4.代码实现
import java.util.Scanner;
/**
*从控制台录入学生的成绩并计算总成绩,输入0时退出
*
*/
public class Example4 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int totalScore = 0;//默认总成绩为0
int score;//定义循环变量,但是没有赋初值
do{
System.out.println("请输入成绩:");
score = sc.nextInt();//第一次执行时,对循环变量score赋上初始值
totalScore += score;
} while(score != 0);
System.out.println("总成绩为:" + totalScore);
}
}
演示do-while循环执行过程
断点调试
练习
从控制台输入一个数字,如果该数字不能被7整除,则重新输入,直到输入的数字能够被7整除为止。
import java.util.Scanner;
/**
*从控制台输入一个数字,如果该数字不能被7整除,则重新输入,直到输入的数字能够被7整除为止。
*
*/
public class Exercise3 {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int number;
do {
System.out.println("请输入一个整数:");
number = sc.nextInt();
} while(number % 7 != 0);
System.out.println(number);
}
}
5.总结
do-while循环的特征就是先执行,后判断。do-while循环最少会执行一次
第五节 for循环
1.语法
for(定义循环变量;循环条件;循环变量的更新){
//循环操作
}
2.执行流程图
3.案例
求1~10的累加和
4.代码实现
/**
* 求1~10的累加和
*
*/
public class Example5 {
public static void main(String[] args){
int sum = 0;//和,默认为0
for(int i = 1;i <= 10;i++){//变量i的作用范围仅限于整个for循环结构
sum += i;
}
System.out.println(sum);
}
}
演示for循环执行过程
断点调试
练习
1.求6的阶乘
/**
*1.求6的阶乘
*
*/
public class Exercise4 {
public static void main(String[] args){
int result = 1;
for(int i = 1;i <= 6;i++){
result *= i;
}
System.out.println(result);
}
}
2.求100以内既能被2整除又能被9整除的所有整数和
/**
* 2.求100以内既能被2整除又能被9整除的所有整数和
*
*/
public class Exercise5 {
public static void main(String[] args){
int sum = 0;
for(int i = 0;i < 100;i++){
if(i % 2 ==0 && i % 9 ==0){
sum += i;
}
}
System.out.println(sum);
}
}
5.总结
for循环的特征是先判断,后执行;如果一开始条件就不满足,那么for循环可能一次也不执行。循环次数确定的情况下,通常使用for循环;循环次数不确定的情况下通常使用while循环和do-while循环
第六节 流程控制
1.break关键字
应用场景
break只能应用于while循环、do-while循环、for循环和switch选择结构
作用
break 应用在循环结构中时,表示终止break所在的循环,执行循环下面的代码,通常与if选择结构配合使用
break 应用在switch选择结构时,表示终止break所在的switch选择结构
案例
获取一个10以内的随机整数,然后从控制台输入一个整数,如果输入的整数与随机整数不相等,则重新输入,直到输入的整数与随机整数相等为止
代码实现
import java.util.Scanner;
/**
* 获取一个10以内的随机整数,然后从控制台输入一个整数,如果输入的整数与随机整数不相等,则重新输入,直到输入的整数与随机整数相等为止
*
*/
public class Example6 {
public static void main(String[] args){
//Math.random(); 表示的意思是随机获取一个0~1之间的随机浮点数,能够取到0,但是取不到1
//[0,1)
double random = Math.random();// [0,1)的浮点数
int number = (int)(random * 10);// [0,10)的整数
//如果要取[10,20)的整数,则(int)(random * 10 + 10);
Scanner sc = new Scanner(System.in);
int inputNumber;
//do{
// System.out.println("请输入一个整数");
// inputNumber = sc.nextInt();
//} while(inputNumber != number);
while(true){//死循环
System.out.println("请输入一个整数");
inputNumber = sc.nextInt();
if(inputNumber == number){
break;//循环中使用break表示终止break所在的循环
}
}
}
}
练习
从控制台输入一个数字,判断该数字是否是素数(素数的特征:只能被1和本身整数,如素数3 只能被1和3整除)。要求使用break实现
import java.util.Scanner;
/**
*从控制台输入一个数字,判断该数字是否是素数(素数的特征:只能被1和本身整数,如素数3 只能被1和3整除)。
* 要求使用break实现
*
*/
public class Exercise6 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = sc.nextInt();
boolean isPrime = true; //任何数都默认为素数
for(int i = 2;i < number;i++){
//只要2~number-1的范围内,任意一个数能够被number整除,则说明该数不是素数
if(number % i == 0){
isPrime = false;
break;
}
}
if(isPrime){
System.out.println(number + "是素数");
}else{
System.out.println(number + "是和数");
}
}
}
2.continue关键字
应用场景
continue只能应用在循环结构中(while循环、do-while循环和for循环)
作用
表示跳过本次循环,进入下一次循环,通常与if选择结构配合使用
案例
打印1~10之间的所有偶数
代码实现
/**
* 打印1~10之间的所有偶数
*
*/
public class Exercise7 {
public static void main(String[] args){
for(int i = 1; i <= 10; i++){
if(i % 2 == 1){
continue;//当i是奇数时,跳过本次循环,直接进入下一次循环
}
System.out.println(i);
}
}
}
练习
从控制台录入1位学生的成绩,如果成绩低于60分,则将输入的成绩加5分,直到成绩及格为止。要求使用continue实现。
import java.util.Scanner;
/**
* 从控制台录入1位学生的成绩,如果成绩低于60分,则将输入的成绩加5分,直到成绩及格为止。要求使用continue实现。
*
*/
public class Exercise8 {
public static void main(String[] args){
int score;
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的成绩:");
score = sc.nextInt();
if(score < 60){
while(true){
score +=5;
if(score < 60)continue;//其实这行代码有没有都无所谓
else break;//这里必须设置一个循环终止条件
}
}
}
}
a.util.Scanner;
/**
* 从控制台录入1位学生的成绩,如果成绩低于60分,则将输入的成绩加5分,直到成绩及格为止。要求使用continue实现。
*
*/
public class Exercise8 {
public static void main(String[] args){
int score;
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的成绩:");
score = sc.nextInt();
if(score < 60){
while(true){
score +=5;
if(score < 60)continue;//其实这行代码有没有都无所谓
else break;//这里必须设置一个循环终止条件
}
}
}
}