编程语言
首页 > 编程语言> > Java基础 第五章 程序控制结构(空心金字塔)

Java基础 第五章 程序控制结构(空心金字塔)

作者:互联网

简单介绍

在程序中,程序运行的流程控制决定程序是如何执行的,主要有三大流程控制语句

(1)顺序控制

(2)分支控制

(3)循环控制

顺序控制

程序从上到下逐行地执行,中间没有任何判断和跳转

public class Test{
    int num1 = 1;
    int num2 = num1 + 2;
    //这句话的意思就是说,只有前面先定义了,后面才能用
}

分支控制

单分支

import java.util.Scanner;
public class If01{
    public static void main(String[] args){
        Scanner Input = new Scanner(System.in);
        int age = Input.nextInt;
        if(age > 18){
            System.out.println("年龄大于18,要对自己的行为负责,送入监狱");
        }
        System.out.println("请再次输入");
    }
}

双分支

import java.util.Scanner;
public class If02{
    public static void main(String[] args){
        Scanner myScanner = new Scanner(System.in);
        int age = myScanner.nextInt();
        if(age>18){
            System.out.println("年龄大于18,要对自己的行为负责,送入监狱");
        }else{
            System.out.println("你的年龄不够大,这次先放过你");
        }
    }
}

单双分支练习题

(1)编写程序,声明2个double型变量并赋值。判断第一个数大于10.0,且第二个数小于20.0,打印两数之和

import java.util.Scanner;
public class IfExercise01{
    public static void main(String[] args){
        Scanner myScanner =new Scanner(System.in);
        double d1 = myScanner.nextDouble();
        double d2 = myScanner.nextDouble();
        if(d1 > 10.0 && d2 <20.0){
            System.out.println(d1+d2);
        }
        
    }
}

(2)定义两个变量int,判断二者之和,是否能被3又被5整除,打印提示信息

public class IfExercise02{
    public static void main(String[] args){
        int a = 10;
        int b = 5;
        int c = a+b;
        if(c % 3 == 0 && c % 5 == 0){
            System.out.println("您真棒");
        }else{
            System.out.println("这个数字不符合要求");
        }
    }
}

(3)判断一个年份是否是闰年

//闰年的条件是 符合下面二者之一:
//(1)年份能被4整除,但不能被100整除;(2)能被400整除
public class IfExercise03{
    public static void main(String[] args){
        int year = 2023;
        if((year%4 == 0 && year%100 !=0) || year%400 == 0){
            System.out.println("这一年是闰年");
        }else{
            System.out.println("这一年不是闰年");;
        }
    }
}

多分枝

特别说明

(1)多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有

(2)如果有else,如果所有的条件表达式都不成立,则默认执行else代码块

import java.util.Scanner;
public class IfExercise04{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入信用分(1-100)");
		double  score = myScanner.nextDouble();
		if (score >= 1 && score <= 100)//输入的约束条件,在一个双分支里嵌套一个多分枝 {
		if(score == 100){
			System.out.println("信用极好");
		}else if(score > 80 && score <= 99){
			System.out.println("信用优秀");
		}else if(score > 60 && score <= 80){
			System.out.println("信用一般");
		}else{
			System.out.println("信用不及格");
		}

		}else{
			System.out.println("输入有误,请重新输入:)");
		}
	}
}

嵌套分支(套娃:))

import java.util.Scanner;
public class IfExercise05{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入分数(1—10)以及性别");
		double score = myScanner.nextDouble();
		char gender = myScanner.next().charAt(0);
		if(score >= 0 && score <= 10){
		if(score >= 8.0){
			if(gender == '女'){
				System.out.println("恭喜你成功进入女生组");
			}else{
				System.out.println("恭喜你成功进入男生组");
			}
		}else{
		System.out.println("很遗憾,你没能进入到下一阶段的比赛");
	}
}else{
	System.out.println("输入错误,请从新输入:)");
}
	}
}

 例2:出票系统:根据淡旺季的月份和年龄,打印票价

4—10旺季:

成人(18-60):60

儿童(<18):半价

老人(>60):1/3

淡季:

成人:40

其他:20

import java.util.Scanner;
public class IfExercise06{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入您想去的月份(1—12)");
		
		int month = myScanner.nextInt();
		
		if(month > 0 && month < 12){
			System.out.println("请输入您的年龄");
			int age = myScanner.nextInt();
		if(month >= 4 && month <= 10){
			if(age >= 18 && age <=60){
				System.out.println("您的票价为60元");
			}else if(age < 18){
				System.out.println("您享受半价活动,只需30元");
			}else if(age > 60){
				System.out.println("您只需支付原价的1/3,20元");

			}else{
				System.out.println("您输入的年龄错误,请重新输入");
			}

		} else{
			if(age >= 18 && age <= 60){
				System.out.println("您的票价为40元");
			}else{
				System.out.println("您的票价为20元");
			}
		}
	}else{
		System.out.println("您输入的月份有误,请重新输入");
	}
	}
}

switch分支结构

注意

如果判断结束后的语句块没有写break,那么将执行剩余所有的语句块,直到遇到break为止。

import java.util.Scanner;
public class Switch01{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入一个字母");
		char eng = myScanner.next().charAt(0);
		switch(eng){
			case 'a':
				System.out.println("A");
				break;
			case 'b':
				System.out.println("B");
				break;
			case 'c':
				System.out.println("C");
			default:
				System.out.println("other");

		}
	}
}

(2)对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”(注:输入的成绩不能大于100)。

import java.util.Scanner;
public class Switch02{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入您的成绩");
		int score = myScanner.nextInt();
		int score1 =score / 60;//大于60的成绩得到1,小于60的成绩得到0
		if (score >=0 && score <=100){
		switch(score1){
			case 1:
				System.out.println("您已及格");
				break;
			case 0:
			System.out.println("您未及格");
			break;
			default:
				System.out.println("您输入的成绩有误");
		}
	}else{
		System.out.println("您输入的成绩无效");
	}
}
}

(3)根据用于指定月份,打印该月份所属季节。(使用穿透)

import java.util.Scanner;
public class Switch03{
	public static void main(String[] args){
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入一个月份");
		int month = myScanner.nextInt();
		if(month > 0 && month <=12){
			switch(month){
				case 3:
				case 4:
				case 5:
					System.out.println("现在是春季");
					break;
				case 6:
				case 7:
				case 8:
					System.out.println("现在是夏季");
					break;
				case 9:
				case 10:
				case 11:
					System.out.println("现在使秋季");
					break;
				case 12:
				case 1:
				case 2:
					System.out.println("现在是冬季");
					break;
			}
		}else{
			System.out.println("您输入的月份有误");
		}
	}
}

for循环控制

public class Hello{
public static void main(String[] args){
	int i = 10;
	for(i = 0;i<10;i++){
	System.out.println("你真帅");
	}
}	
}

细节

(1)循环条件是返回一个布尔值的表达式

(2)for(;循环判断条件;)中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略。

(3)循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。

public class ForExercise01{
    public static void main(String[] args){
		int j = 0;//一定要记得定义初始值
		int sum = 0; 
        //把起始值和结束值变成变量
        //int star = 1;
        //int end = 100;
        for(int i = 1/*star*/; i <= 100/*end*/ ; i++){
            if(i % 9 == 0){ 
                System.out.println(i);
                j++;
				sum +=i;
            }
        }
		System.out.println("个数为" + j+'\n' +"总和为" + sum);
    }
}

(2)完成下面表达式的输出:

0+5=5 ​

1+4=5 ​

2+3=5 ​

3+2=5 ​

4+1=5 ​

5+0=5

public class ForExercise02{
	public static void main(String[] args){

		for (int i=0,j=5;i<6;i++,j--){
			int sum = 0;
			sum = i + j;
			System.out.println(i + "+" + j +"="+sum);
		}
	}
}

while循环控制(先问再打)

注意:(1)while循环也有四要素,只是四要素放的位置和for不一样

(2)循环条件是返回一个布尔值的表达式

(3)while 循环是先判断再执行语句

public class WhileExercise01{
    public static void main(String[] args){
        int i = 1;
        while(i <= 100){
           if(i % 3 == 0){
               System.out.println("i=" + 1);
           }
            i++;
        }
    }
}

(2)打印40--200之间所有的偶数

public class WhileExercise02{
    public static void main(String[] args){
        int j = 40;
        while(j<200){
            if(j % 2 ==0){
                System.out.println("偶数=" + j);
            }
            j++;
        }
    }
}

do..while循环控制(先打再问)

public class DoWhileExercise01{
    public static void main(String[] args){
        int i = 0;
        do{
            System.out.println("你真帅");
        }while(i<10);
        System.out.println("退出程序");
    }
}

例:统计1--200之间能被5整除但不能被3整除的个数

public class DoWhileExercise02{
    public static void main(String[] args){
        int i=1;
		int count =0;
        do{
            if(i % 5 == 0 && i % 3 != 0){
                System.out.println(i);
                
				count++;
            }
			i++;//注意
        }while(i<=200);
        System.out.println("程序正在运行...");
    }
}

例:如果李三不还钱,则老程将一直使出打狗棍,直到李三说还钱为止

import java.util.Scanner;
public class Hello{
    public static void main(String[] args){
        Scanner myScanner = new Scanner(System.in);
       char answer =' ';
        do{
            System.out.println("老程使出打狗棍");
            System.out.println("接着问,李三你到底还不还钱y/n");
            answer = myScanner.next().charAt(0);
            System.out.println("李三的回答是"+answer);
           
        }while(answer != 'y');
        System.out.println("你可终于还钱了");
    }
}

多重循环控制

import java.util.Scanner;
public class MulForExercise01{
    public static void main(String[] args){         
        int num = 0//定义一个变量用来统计人数
        double totalscore = 0.0; //还得定义一个变量统计所有学生的成绩
        Scanner myScanner = new Scanner(System.in);
        for(int j = 1;j <= 3;j++){
            double sum = 0;//用来统计总和
            System.out.println("接下来请输入第"+j+"个班学生的成绩");
                for(int i = 1;i <= 5;i++){ //先计算一个班五个同学的成绩
                System.out.println("请输入第"+j+"个班的第"+i+"个学生的成绩");
                double score = myScanner.nextDouble();
                    if(score>=60){
                        num++;
                    }
                 sum += score;//对成绩求和
        }
         double average = 0.0;
         average = sum/5.0;
         System.out.println("第"+j+"个班五名同学的平均分是"+average);
            totalscore += sum;
        }                     
        System.out.println("全体同学的平均分是:"+totalscore/(3*5)+"分");
        }
    }
public class MulForExercise02{
    public static void main(String[] args){
        for(int i = 1;i <= 9; i++){
        for(int j = 1;j <= i; j++){
            System.out.print(j + "*"+ i + "="+ j*i+'\t');
        }
            System.out.println('\n');
        }
    }
}
public class MulForExercise03{
    public static void main(String[] args){
        for(int i = 1; i <= 5;i++){
            for(int j = 1;j<=2*i-1;j++){
                for(int k = 5;k<=k-1;k--){
                    System.out.print('\t');
                }
                System.out.print("*");
            }
            System.out.println('\n');
        }
    }
}

例(4)打印空心金字塔(行数由输入确定)

import java.util.Scanner;
public class MulForExercise04{
  public static void main(String[] args){
    System.out.println("请输入您需要空心菱形的行数");
    Scanner myScanner = new Scanner(System.in);
    int num = myScanner.nextInt();
        for(int i = 1; i <= num;i++){
            for(int k = 1;k<=num-i;k++){
                    System.out.print(' ');
                }
            for(int j = 1;j<=2*i-1;j++){              
                if(j == 1 || j == 2*i-1 || i == num){
                System.out.print("*");}
                else{
                    System.out.print(' ');
                }
                
            }
            System.out.println('\n');
        }
    }
}

例(5)例(4)进阶版:打印空心菱形

import java.util.Scanner;
public class Hello{
  public static void main(String[] args){
    System.out.println("请输入您需要空心菱形的行数");
    Scanner myScanner = new Scanner(System.in);
    int num = myScanner.nextInt();
        for(int i = 1; i <= num;i++){
            for(int k = 1;k<=num-i;k++){
                    System.out.print(' ');
                }
            for(int j = 1;j<=2*i-1;j++){              
                if(j == 1 || j == 2*i-1 ){
                System.out.print("*");}
                else{
                    System.out.print(' ');
                }
                
            }
            System.out.println('\n');
        }
         for(int x = num-1; x >= 1;x--){
            for(int y = 1;y <= num-1-(x-1);y++){
                    System.out.print(' ');
                }
            for(int z = 1;z<=2*x-1;z++){              
                if(z == 1 || z == 2*x-1 ){
                System.out.print("*");}
                else{
                    System.out.print(' ');
                }
                
            }
            System.out.println('\n');
        }
    }
}

break

public class BreakExercise01{
    public static void main(String[] args){
        int count = 0;
        for(int i = 1;i<=10;i++){
             int num = (int)(Math.random()*100)+1;
            count++;
            while(num == 97){
            System.out.println(count);
				break;				
        }					
		}
		System.out.println("这一轮没有生成97");
    }
}

注意事项:

(1)break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块。例:

public class BreakLable{
    public static void main(String[] args){
        lable:
        for(int j = 0; j < 4;j++){
            lable2:
            for(int i = 1;i < 10;i++){
                if(i == 2){
                    break lable1;
                }
                System.out.println("i="+i);
            }
        }
    }
}
public class BreakExercise01{
    public static void main(String[] args){
		int sum = 0;
        for(int i=1 ;i <=100;i++){           
            sum += i;
            if(sum > 20){
                System.out.println("累加和已经大于20" + '\n'+ i);
                break;
            }
        }
    }
}
import java.util.Scanner;
public class BreakExercise02{
    public static void main(String[] args){
         Scanner myScanner = new Scanner(System.in);     
         int chance=3;  
        for(int i = 1;i<=3;i++){
      System.out.println("请输入您的用户名");
            String username = myScanner.next();
       System.out.println("请输入您的密码");
            String password = myScanner.next();
        if("karry".equals(username) && "0921".equals(password)){//equals用来比较字符串是否相等
            System.out.println("恭喜你,成功登录"); 
            break;
        }else{
            
            chance--;
            if(chance > 0){
            System.out.println("您输入的信息有误,请重新输入,您还有"+chance+"次登录机会");}
            else{
                System.out.println("您的机会已用完,账号冻结");
            }
        }
        }
    }
}

continue

return

public class Return{
    public static void main(String[] args){
        for(int i = 1;i <= 5;i++){
            if(i==3){
                System.out.println("今天天气真好");
            }
            System.out.println("今天心情真好");
        }
        System.out.println("今天是个好日子");
    }
}
//输出的结果是:今天心情真好
             //今天心情真好
             //今天天气真好

本章作业

(1)某人有100000元,每经过一次路口都需要缴费,规则如下:

1)当现金>50000时,每次交5%

2)当现金<=50000时,每次交1000

编程计算该人可以经过多少次路口

public class Homework01{
    public static void main(String[] args){
        double money = 100000;
        int count =0;
        while(true){
            if(money > 50000){
                money*=0.95;
                count++;
            }else if(money >=1000){
                money-=1000;
                count++;
            }else{
                break;
            }
        }
        System.out.println("一共通过了"+count+"个路口");
        System.out.println("还剩"+money);
        }
    }

(2)实现判断一个一个整数,属于那个范围:大于0;小于0;等于0;

import java.util.Scanner;
public class HomeWork02{
    public static void main(String[] args){
        Scanner myScanner = new Scanner(System.in)
        System.out.println("请输入您想要判断的数");
        int num = myScanner.nextInt();
        if(num>0){
            System.out.println("这是一个大于0的整数");}
            if(num<0){
                System.out.println("这是一个小于0的数");}
                if(num==0){
                    System.out.println("这个数为0");
                           
        }
    }
}

(3)判断一个年份是否为闰年

import java.util.Scanner;
public class Homework03{
    public static void main(String[] args){
        Scanner myScanner = new Scanner(System.in)
        System.out.println("请输入您想要判断的年份");
        int year = myScanner.nextInt();
        if(year % 4 == 0 && year % 100 != 0 || year % 400 ==0){
            System.out.println("这一年是闰年");
        }
        System.out.println("这一年不是闰年");
    }
}

(4)判断一个数字是否是水仙花数,所谓水仙花数是指一个三位数,其各个位上数字立方和等于其本身

import java.util.Scanner;
public class HomeWork04{
    public static void main(String[] args){
        System.out.println("请输入一个三位数");
        Scanner myScanner = new Scanner(System.in);
        int i = myScanner.nextInt();
        if(i>99 && i<=999){
        int a=i / 100;
        int b=(i % 100)/10;
        int c=(i%10);
        if((a*a*a + b*b*b + c*c*c) == i){
            System.out.println("这是一个水仙花数");
        }else{
            System.out.println("这不是一个水仙花数");
        }
    }
    System.out.println("您输入的数字有误,请看清要求");
    }
}

(5)输出1-100之间不能被5整除的数,每五个一行

public class HomeWork05{
   public static void main(String[] args){
        int count = 0;
        for(int i = 1;i <= 100;i++){
            if(i % 5 != 0){                
                    System.out.print(i + "\t");
                    count++;
                    if(count % 5 == 0){
                        System.out.println();
                    }
            }
        }
    }
}

(6)输出小写的a-z以及大写的Z-A

public class HomeWork06{
   public static void main(String[] args){
        for(char c1 = 'a';c1 <= 'z';c1++ ){//字符是可以比较大小的
            System.out.print(c1 +" ");}
            System.out.print("\n");
        for(char c2 = 'Z';c2 >='A';c2--){
            System.out.print(c2 + " ");
        }
    }
}

(7)求出1-1/2+1/3+……+1/100的和

public class HomeWork07{
   public static void main(String[] args){
            int sum = 0;            
        for(int i = 1;i <= 100;i++){
           for(int j =1; j <= i;j++){
            sum += j;
           }           
        }
        System.out.println(sum);        
    }
}

标签:Java,Scanner,int,System,第五章,程序控制,println,public,out
来源: https://blog.csdn.net/a2649432564/article/details/121057548