第四章、 程序控制结构
- 程序流程控制介绍
在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。
- 顺序控制
- 分支控制
- 循环控制
4.1 顺序控制
- 顺序控制介绍
程序从上到上逐行地执行,中间没有任何判断和跳转。
4.2 分支控制(if else switch)
分支结构有三种:
- 单分支
- 双分支
- 多分支
(1)if语法:
if (condition) {
// 当条件为真时执行的代码块
} else {
// 当条件为假时执行的代码块
}
其中,condition 是一个布尔表达式,当条件为真时执行 if 代码块,否则执行 else 代码块。
- 使用:要求输入两个整数,输出其最大值
package chapter4;
import java.util.Scanner;
public class Test1 {
//if-else的使用
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int c1=scanner.nextInt();
int c2=scanner.nextInt();
if(c1>c2){
System.out.print("最大的是:"+c1);
}else{
System.out.print("最大的是:"+c2);
}
}
}
(2) if-else if-else 语法:
if (condition1) {
// 当条件1为真时执行的代码块
} else if (condition2) {
// 当条件2为真时执行的代码块
} else {
// 当条件1和条件2都为假时执行的默认代码块
}
可以有多个 else if 块,按顺序判断条件并执行符合条件的代码块,如果所有条件都为假,则执行默认的 else 代码块。
- 使用:输入一个整数,判断它与0的关系。
package chapter4;
import java.util.Scanner;
public class Test2 {
public static void main(String args[]){
//if-else if-……-else的使用
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
if(a>0){
System.out.print("a大于0");
}else if(a==0){
System.out.print("a等于0");
}else{
System.out.print("a小于0");
}
}
}
(3) switch语法:
switch (expression) {
case value1:
// 当 expression 的值等于 value1 时执行的代码块
break;
case value2:
// 当 expression 的值等于 value2 时执行的代码块
break;
default:
// 当 expression 的值与所有 case 不匹配时执行的默认代码块
break;
}
根据 expression 的值选择执行对应的 case 块,如果没有匹配的 case,则执行默认的 default 代码块。
- 使用:输入1-7,输出星期几。
package chapter4;
import java.util.Scanner;
public class Test3 {
public static void main(String args[]){
//switch的使用
Scanner scanner=new Scanner(System.in);
int weekday=scanner.nextInt();
switch (weekday){
case 1:
System.out.print("今天星期一");
break;
case 2:
System.out.print("今天星期二");
break;
case 3:
System.out.print("今天星期三");
break;
case 4:
System.out.print("今天星期四");
break;
case 5:
System.out.print("今天星期五");
break;
case 6:
System.out.print("今天星期六");
break;
case 7:
System.out.print("今天星期天");
break;
default:
System.out.print("请输入1-7的数字!");
break;
(4) 三元运算符:
result = (condition) ? value1 : value2;
如果 condition 成立,则返回 value1,否则返回 value2。
- 使用:输入两个整数,判断最小值。
package chapter4;
import java.util.Scanner;
public class Test4 {
public static void main(String args[]){
//三元换元符的使用
Scanner scanner = new Scanner(System.in);
int m1=scanner.nextInt();
int m2=scanner.nextInt();
String result = (m1>m2)?"最小值:"+m2:"最小值:"+m1;
System.out.print(result);
}
}
4.3 循环控制(for ,while ,do while,多重循环)
- while循环:
while (condition) {
// 当条件为真时执行的代码块
}
只要 condition 的值为真,就会不断执行循环体中的代码块。
- 使用:输出n个平方值
package chapter4;
import java.util.Scanner;
public class Test5 {
public static void main(String args[]){
Scanner scanner =new Scanner(System.in);
int square=scanner.nextInt();
int i=1;
while(i<=square){
System.out.println(i*i);
i++;
}
}
}
- do-while循环:
do {
// 执行至少一次的代码块
} while (condition);
先执行一次循环体中的代码块,然后判断 condition 是否为真,如果为真则继续执行循环体中的代码块,否则退出循环。
- 使用:打印0到9
package chapter4;
public class Test6 {
public static void main(String args[]){
int i=0;
do{
System.out.println(i);
i++;
}while(i<10);
}
}
- for循环:
for (initialization; condition; update) {
// 每次循环执行的代码块
}
initialization 用于初始化循环变量;condition 为循环条件,只要满足条件就继续执行循环体中的代码块;update 用于更新循环变量的值,每次循环结束时执行。
- 使用:打印九九乘法表
package chapter4;
public class Test7 {
public static void main(String args[]){
for(int i=1;i<10;i++){
for(int j=1;j<=i;j++){
System.out.printf("%d×%d=%d\t",j,i,i*j);
}
System.out.println();
}
}
}
- 增强for循环(foreach循环):
for (type element : array) {
// 针对数组每个元素执行的代码块
}
遍历数组中的所有元素,对于数组中的每个元素,执行循环体中的代码块。
- 使用:遍历数组
package chapter4;
public class Test8 {
public static void main(String args[]){
int[] numbers={1,2,3,4,5};
for(int num:numbers){
System.out.println("当前的数字是:"+num);
}
}
}
4.4 break
break语句:
while (condition) {
// 循环体中的代码块
if (break_condition) {
break;
}
}
终止循环,跳出当前循环体。
- 使用:输出数组,当遇到3就停止输出
package chapter4;
public class Test8 {
public static void main(String args[]){
int[] numbers={1,2,3,4,5};
for(int num:numbers){
if(num==3){
break;
}
System.out.println("当前的数字是:"+num);
}
}
}
4.5 continue
continue语句:
for (type element : array) {
if (continue_condition) {
continue;
}
// 针对数组中非 continue_condition 元素执行的代码块
}
跳过循环体中符合条件的代码,执行下一次循环。
- 使用:输出数组,但不输出3,其他都输出。
package chapter4;
public class Test8 {
public static void main(String args[]){
int[] numbers={1,2,3,4,5};
for(int num:numbers){
if(num==3){
continue;
}
System.out.println("当前的数字是:"+num);
}
}
}
4.6 return
return 关键字用于结束当前方法的执行,并返回一个值(可选)。以下是 return 关键字的使用示例:
- 无返回值的方法:
public void printMessage() {
System.out.println("Hello, World!");
return; // 结束方法的执行
}
调用 printMessage() 方法时,会打印 “Hello, World!”,然后方法执行结束。
- 有返回值的方法:
public int addNumbers(int a, int b) {
int sum = a + b;
return sum; // 返回计算结果
}
调用 addNumbers(2, 3) 方法时,会返回 5。
- 使用 return 提前结束循环:
public int findFirstEvenNumber(int[] numbers) {
for (int num : numbers) {
if (num % 2 == 0) {
return num; // 找到第一个偶数并返回
}
}
return -1; // 如果没有找到偶数,则返回 -1
}
调用 findFirstEvenNumber(new int[]{1, 3, 4, 7, 8}) 方法时,会返回 4,因为它是数组中的第一个偶数。
return 关键字可以根据需要在方法中的任何位置使用,用于提前结束方法的执行,并返回相应的值。注意,在某些情况下,return 后面的代码可能不会被执行到,因此需要仔细考虑方法的逻辑和返回值的正确性。
4.7 本章练习
- 输入分数,判断分数的等级,100分为满分,大于80分是优秀,大于60分不及格,否则就是不及格。
package chapter4;
import java.util.Scanner;
public class Test9 {
public static void main(String args[]){
//if-else if-else多分支的使用
Scanner scanner=new Scanner(System.in);
int grade=scanner.nextInt();
if(grade==100){
System.out.print("满分");
}else if(grade>=80){
System.out.print("优秀");
}else if(grade>=60){
System.out.print("及格");
}else{
System.out.print("不及格");
}
}
}
- 若输入一个小写字母,输出其大写字母,否则输出other。
package chapter4;
import java.util.Scanner;
public class Test10 {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
String letter=scanner.next();
if(letter.length()!=1){
System.out.print("other");
}else{
char lower=letter.charAt(0);
if(lower>='a' && lower<='z'){
//A65,Z90,a97,z122
char upper=(char)(lower-32);
System.out.print("小写字母:"+lower+"的大写字母:"+upper);
}else{
System.out.print("other");
}
}
}
}
- 对学生成绩大于60分,输出及格,低于60分,输出不及格(输出的成绩不能大于100)
package chapter4;
import java.util.Scanner;
public class Test11 {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int grade=scanner.nextInt();
int pass=grade/60;
//使用switch来判断成绩是否及格,满分是120,grade/60
switch (pass){
case 2:
System.out.print("分数满分");
break;
case 1:
System.out.print("分数及格");
break;
case 0:
System.out.print("分数不及格");
break;
default:
System.out.print("请输入的数");
break;
}
}
}
- 输入整数1-12,判断打印该月份所属 的季节。3、4、5是春季;6、7、8是夏季;9、10、11是秋季;12、1、2是冬季。
package chapter4;
import java.util.Scanner;
public class Test12 {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int month=scanner.nextInt();
switch(month){
case 3:
case 4:
case 5:
System.out.print("春季");
break;
case 6:
case 7:
case 8:
System.out.print("夏季");
break;
case 9:
case 10:
case 11:
System.out.print("秋季");
break;
case 12:
case 1:
case 2:
System.out.print("冬季");
break;
default:
System.out.print("请输入1-12");
break;
}
}
}
- 打印1-100,使用do…while
package chapter4;
public class Test13 {
public static void main(String args[]){
//打印1-100,使用do..while
int i=1;
do{
System.out.print(i+" ");
i++;
if(i==51){
System.out.println();
}
}while(i<=100);
}
}
- 计算1-100的和
package chapter4;
public class Test14 {
public static void main(String args[]){
//计算1-100的和
int sum=0;
for(int i=1;i<=100;i++){
sum+=i;
}
System.out.print(sum);
}
}
- 计算1-200之间能被5整除但不能被3整除的个数
package chapter4;
public class Test15 {
public static void main(String args[]){
int i=5;
do{
if(i%3!=0 && i%5==0){
System.out.print(i+" ");
}
i++;
}while(i<=200);
}
}
- 实现猜数字功能
package chapter4;
import java.util.Random;
import java.util.Scanner;
public class Test16 {
public static void main(String args[]){
//猜数字
Scanner scanner=new Scanner(System.in);
Random random=new Random();
int number=random.nextInt(100)+1;
int c;
do{
c=scanner.nextInt();
if(c==number){
System.out.println("恭喜你猜对啦!"+c);
}else if(c<number){
System.out.println("猜小啦,再猜一次");
}else{
System.out.println("猜大啦,再猜一次");
}
}while(c!=number);
}
}
- 打印指定高度的三角形
package chapter4;
import java.util.Scanner;
public class Test17 {
public static void main(String args[]){
//使用多重循环打印三角形
Scanner scanner=new Scanner(System.in);
int s=scanner.nextInt();
for(int i=1;i<=s;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
- 熟悉使用字符串判断
package chapter4;
import java.util.Scanner;
public class Test18 {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
while(true){
System.out.println("我是帅哥吗?请回答yes/no");
String name=scanner.next();
if(name.equals("yes")){ //对比相等,字符串要使用equals(),不能使用==
System.out.print("恭喜你说对!");
break;
}else{
System.out.println("答案错误,请重新回答。");
}
}
scanner.close();
}
}
- 出租车行程收费,具体收费标准写在了代码注释
package chapter4;
import java.util.Scanner;
public class Test19 {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int distance=scanner.nextInt();
int fare;
//出租车,起步价3公里以内(包含)收费10块钱,超过3公里但不超过6公里(包含)的收费每公里5块钱,
// 超过6公里但不超过10公里(包含)的收费每公里8块钱,超过10公里的收费每公里10块钱,小帅想知道自己从一个地方到另一个地方要多少钱?
if(distance <= 3){
fare = 10;
System.out.println("收费 " + fare + " 块钱");
}else if(distance <= 6){
fare = 10 + (distance - 3) * 5;
System.out.println("收费 " + fare + " 块钱");
}else if(distance <= 10){
fare = 10 + 3 * 5 + (distance - 6) * 8;
System.out.println("收费 " + fare + " 块钱");
}else {
fare = 10 + 3 * 5 + 4 * 8 + (distance - 10) * 10;
System.out.println("收费 " + fare + " 块钱");
}
scanner.close();
}
}
- 判断闰年,一、被4整除,但不能被100整除;二、能够被400整除
package chapter4;
import java.util.Scanner;
public class Test20 {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int year=scanner.nextInt();
//判断闰年,一、被4整除,但不能被100整除;二、能够被400整除
if((year%4==0 && year%100!=0)||year%400==0){
System.out.print("这一年是闰年:"+year);
}else{
System.out.print("这一年不是闰年:"+year);
}
scanner.close();
}
}
- 判断水仙花数,即它的各个位数的立方和等于其本身,比如:153
package chapter4;
import java.util.Scanner;
public class Test21 {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
int flower=scanner.nextInt();
int sum=0;
//判断水仙花数,即它的各个位数的立方和等于其本身,比如:153
String f=flower+"";
for(int i=0;i<f.length();i++){
char c=f.charAt(i);
int s=Character.getNumericValue(c);
sum+=s*s*s;
}
if(sum==flower){
System.out.print("这是一颗水仙花数");
}else{
System.out.print("这不是一颗水仙花数");
}
scanner.close();
}
}