愁与西风应有约,年年同赴清秋。

第03章_流程控制语句拓展练习


简答题

1、switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?

可以作用在byte上,
不能作用在long上
可以作用在String上(JDK7.0新增)

2、循环结构是如何最后退出循环的,有哪些不同的情况请说明

情况1:循环条件返回false

情况2:在循环体内,一旦执行到break,跳出循环

3、说明break和continue使用上的相同点和不同点

				使用范围		在循环结构中的作用				相同点
break:			switch-case
				循环结构中		结束(或跳出)当前循环结构		 在此关键字的后面不能声明执行语句。

continue:		循环结构中		结束(或跳出)当次循环			  在此关键字的后面不能声明执行语句。

4、switch后面使用的表达式可以是哪些数据类型的

switch中的表达式只能是特定的数据类型。如下:
byte \ short \ char \ int \ 枚举(JDK5.0新增) \ String(JDK7.0新增)

5、判断代码输出结果

label: for (int i = 1; i <= 4; i++) {
			for (int j = 1; j <= 10; j++) {
				if (j % 4 == 0) {
					continue label;
				}
				System.out.print(j);
			}
			System.out.println();
}

正确结果:123123123123

编程题

1、奇偶判断

案例:从键盘输入一个整数,判断它是奇数还是偶数(这里把0归为偶数)

1557990838327

说明:能够被2整除的是偶数,不能被2整除的是奇数

public class Exercise1{
	public static void main(String[] args){
		java.util.Scanner input = new java.util.Scanner(System.in);
		System.out.print("请输入一个整数:");
		int num = input.nextInt();
		if(num % 2 == 0){
			System.out.println(num + "是偶数");
		}else{
			System.out.println(num + "是奇数");
		}
	}
}

2、字符类型判断

案例:从键盘输入一个字符,判断它是字母还是数字,还是其他字符

1557991405648

​ 数字范围:’0’-‘9’

​ 字母范围:’A’-‘Z’,’a’-‘z’

public class Exercise2{
	public static void main(String[] args){
		java.util.Scanner input = new java.util.Scanner(System.in);
		System.out.print("请输入一个字符:");
		char c = input.next().charAt(0);
		if(c >= '0' && c <= '9'){
			System.out.println(c + "是数字.");
		}else if(c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z'){
			System.out.println(c + "是字母.");
		}else{
			System.out.println(c + "非数字非字母的其他字符.");
		}
	}
}

3、判断代码输出结果

label: for (int i = 1; i <= 4; i++) {
			for (int j = 1; j <= 10; j++) {
				if (j % 4 == 0) {
					continue label;
				}
				System.out.print(j);
			}
			System.out.println();
}

正确结果:123123123123

4、成绩合法范围判断

从键盘输入一个分数,如果成绩在[0,100]之间,就显示成绩值,否则就显示输入成绩错误!

import java.util.Scanner;

public class Exercise4 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入成绩:");
        int score = input.nextInt();

        if(score <0 || score > 100){
            System.out.println("成绩输入有误!");
        }else {
            System.out.println("成绩为:" + score);
        }

        input.close();
    }
}

5、判断年、月、日是否合法

从键盘输入年、月、日,要求年份必须是正整数,月份范围是[1,12],日期也必须在本月总天数范围内,如果输入正确,输出“年-月-日”结果,否则提示输入错误。

注意:需要考虑闰年的情况。

import java.util.Scanner;

public class Exercise5 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("请输入日期:");
        System.out.print("年:");
        int year = input.nextInt();

        System.out.print("月:");
        int month = input.nextInt();

        System.out.print("日:");
        int day = input.nextInt();

        input.close();

        if (year > 0) {
            if (month >= 1 && month <= 12) {
                //计算month月的总天数
                int days;
                if (month == 2) {
                    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { //此条件下,为闰年
                        days = 29;
                    } else {
                        days = 28;
                    }
                } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                    days = 30;
                } else {
                    days = 31;
                }

                if(day >= 1 && day <= days) {
                    System.out.println(year + "-" + month + "-" + day);
                }else{
                    System.out.println("日期输入不合法");
                }
            } else {
                System.out.println("月份输入不合法");
            }
        } else {
            System.out.println("年份输入不合法");
        }
    }
}

6、素数判断

从键盘输入一个大于1的自然数,判断它是否是素数。

提示:素数是指大于1的自然数中,除了1和它本身以外不能再有其他因数的自然数,即某个素数n,在[2,n-1]范围内没有其他自然数可以把n整除

import java.util.Scanner;

public class Exercise6 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("请输入一个整数:");
        int num = input.nextInt();

        boolean flag = true;//假设num是素数
        //找num不是素数的证据
        for(int i=2; i<num; i++){//i<=Math.sqrt(num);
            if(num % i ==0){//num被某个i整除了,num就不是素数
                flag = false;
                break;//找到其中一个可以把num整除的数,就可以结束了,因为num已经可以判定不是素数了
            }
        }

        //只有把[2,num-1]之间的所有数都检查过了,才能下定结论,num是素数
        if(num >1 && flag){
            System.out.println(num + "是素数");
        }else{
            System.out.println(num + "不是素数");
        }
    }
}

7、押宝游戏

随机产生3个1-6的整数,如果三个数相等,那么称为“豹子”,如果三个数之和大于9,称为“大”,如果三个数之和小于等于9,称为“小”,用户从键盘输入押的是“豹子”、“大”、“小”,并判断是否猜对了

提示:随机数 Math.random()产生 [0,1)范围内的小数

1659112055147

import java.util.Scanner;

public class Exercise7 {
    public static void main(String[] args) {
        //1、随机产生3个1-6的整数
        int a = (int)(Math.random()*6 + 1);
        int b = (int)(Math.random()*6 + 1);
        int c = (int)(Math.random()*6 + 1);

        //2、押宝
        Scanner input = new Scanner(System.in);
        System.out.print("请押宝(豹子、大、小):");
        String ya = input.next();
        input.close();

        //3、判断结果
        boolean result = false;
        //switch支持String类型
        switch (ya){
            case "豹子": result = a == b && b == c; break;
            case "大": result = a + b + c > 9; break;
            case "小": result = a + b + c <= 9; break;
            default:System.out.println("输入有误!");
        }

        System.out.println("a,b,c分别是:" + a +"," + b +"," + c );
        System.out.println(result ? "猜中了" : "猜错了");
    }
}

8、彩票中奖

假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入一个两位数,然后按照下面的规则判定用户是否能赢。

1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。

2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。

3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。

4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。

5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。

提示:使用Math.random() 产生随机数

Math.random() 产生[0,1)范围的随机值

Math.random() * 90:产生[0,90) 范围的随机值

Math.random() * 90 + 10:产生[10,100) 即得到 [10,99]范围的随机值

使用(int)(Math.random() * 90  + 10)产生一个两位数的随机数。
import java.util.Scanner;

public class Exercise8 {
    public static void main(String[] args){
        //1、随机地产生一个两位数的彩票
        int rand = (int)(Math.random() * 90  + 10);//[10,99]

        //2、提示用户输入一个两位数
        Scanner input = new Scanner(System.in);
        System.out.print("请输入两位数的彩票号码:");
        int num = input.nextInt();
        input.close();

        //3、处理数字
        int randShi = rand/10;
        int randGe = rand%10;
        int numShi = num/10;
        int numGe = num%10;

        //4、判断
        if(num == rand){
            System.out.println("奖金10 000美元");
        }else if(randShi == numGe && randGe == numShi){
            System.out.println("奖金3 000美元");
        }else if(randShi == numShi || randGe == numGe){
            System.out.println("奖金1 000美元");
        }else if(randShi == numGe || randGe == numShi){
            System.out.println("奖金500美元");
        }else{
            System.out.println("彩票作废");
        }

        System.out.println("本次号码:" + rand);
    }
}

9、解方程

求ax2+bx+c=0方程的根,其中a,b,c分别为函数的参数。

如果a≠0,那么:

(1)当b2-4ac>0,则一元二次方程有两个实数解:img

(2)当b2-4ac=0,则一元二次方程有一个实数解:img

(3)当b2-4ac<0,则一元二次方程在实数范围内无解;

如果a=0,b≠0,那么一元一次方程有一个解:img

如果a=0,b=0,那么参数输入有误,该式子不是方程。

提示1:Math.sqrt(num); sqrt指平方根

例如:

求x2-4x+1=0方程的根

求x2-2x+1=0方程的根

import java.util.Scanner;

public class Exercise9 {
    public static void main(String[] args){
        //(1)先输入a,b,c三个函数的参数
        Scanner input = new Scanner(System.in);
        System.out.println("请输入方程:ax的平方 + bx + c = 0的三个参数:");
        System.out.print("a:");
        double a = input.nextDouble();

        System.out.print("b:");
        double b = input.nextDouble();

        System.out.print("c:");
        double c = input.nextDouble();
        input.close();

        //(2)根据参数的不同,求方程的根/解
        if(a!=0){
            double d = b*b - 4*a*c;
            if(d>0){
                double x1 = (-b + Math.sqrt(d))/(2*a);
                double x2 = (-b - Math.sqrt(d))/(2*a);

                System.out.println("一元二次方程有两个根:" + x1 + "," +x2);
            }else if(d==0){
                double x = -b/(2*a);
                System.out.println("一元二次方程有1个根:"+ x);
            }else{//d<0
                System.out.println("一元二次方程在实数范围内无解");
            }
        }else{//a==0
            if(b!=0){
                double x = -c/b;
                System.out.println("一元一次方程的根:" + x);
            }else{
                System.out.println("输入有误,a,b,c的值不能构成一个方程");
            }
        }
    }
}

10、打印”菱形”形状的图案

        * 
      * * * 
    * * * * * 
  * * * * * * * 
* * * * * * * * * 
  * * * * * * * 
    * * * * * 
      * * * 
        * 	
public class Exercise10 {
    public static void main(String[] args){
        //上半部分:正的等腰三角形
        //5行
        for(int i=1; i<=5; i++){
            //(1)打印空格
			/*
			当i=1,打印4个空格,j=4,3,2,1	j>=i
			当i=2,打印3个空格,j=4,3,2
			当i=3,打印2个空格,j=4,3
			当i=4,打印1个空格,j=4
			当i=5,打印0个空格,j=4,让循环条件一次都不满足
			*/
            for(int j=4; j>=i; j--){
                System.out.print("  ");
            }
            //(2)打印*
			/*
			当i=1,打印1个,j=1					j<=2*i-1
			当i=2,打印3个,j=1,2,3,
			当i=3,打印5个,j=1,2,3,4,5
			当i=4,打印7个,j=1,2,3,4,5,6,7
			当i=5,打印9个,j=1,2,3,4,5,6,7,8,9
			*/
            for(int j=1; j<=2*i-1; j++){
                System.out.print("* ");
            }
            //(3)换行
            System.out.println();
        }


        //下半部分:倒立的等腰三角形
        //4行
        for(int i=1; i<=4; i++){
            //(1)打印空格
			/*
			当i=1,1个空格,j=1		j<=i
			当i=2,2个空格,j=1,2
			当i=3,3个空格,j=1,2,3
			当i=4,4个空格,j=1,2,3,4
			*/
            for(int j=1; j<=i; j++){
                System.out.print("  ");
            }
            //(2)打印*
			/*
			当i=1,7个*,j=1,2,3,4,5,6,7  j<=9-2*i;
			当i=2,5个*,j=1,2,3,4,5
			当i=3,3个*,j=1,2,3
			当i=4,1个*,j=1
			*/
            for(int j=1; j<=9-2*i; j++){
                System.out.print("* ");
            }
            //(3)换行
            System.out.println();
        }
    }
}

11、三天打渔两天晒网

需求:假设从2000年1月1日开始三天打渔,两天晒网,从键盘输入今天的日期年、月、日,显示今天是打鱼还是晒网?

public class Exercise11{
	public static void main(String[] args){
		//1、从键盘分别输入年、月、日
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.print("年:");
		int year = input.nextInt();
		
		System.out.print("月:");
		int month = input.nextInt();
		
		System.out.print("日:");
		int day = input.nextInt();
		
		/*
		(1)先算出,这一天距离2000年1月1日是第几天
		①第month月的day天
		②第year年的[1,month-1]的满月
		③从[2000,year-1]的满年天数
		(2)用总天数%5,看余数,余数是1,2,3是打鱼,4和0是晒网
		*/
		
		int days = day;//①第month月的day天
		
		//②累加[1,month-1]的满月天数
		for(int i=1; i<month; i++){//这个i代表月份
			if(i==4 || i==6 || i==9 || i==11){
				days+=30;
			}else if(i==2){
				if(year%4==0 && year%100!=0 || year%400==0){
					days+=29;
				}else{
					days+=28;
				}
			}else{
				days+=31;
			}
		}
		
		//③从[2000,year-1]的满年天数
		for(int i=2000; i<year; i++){//这个i代表年份
			if(i%4==0 && i%100!=0 || i%400==0){
				days+=366;
			}else{
				days+=365;
			}
		}
		
		//判断
		if(days%5==1 || days%5==2 || days%5==3){
			System.out.println("打鱼");
		}else{
			System.out.println("晒网");
		}
	}
}

12、完数判断

一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3。编程 找出1000以内的所有完数。(因子:除去这个数本身的其它约数)

public class Exercise12 {
    public static void main(String[] args){
        //找出1000以内的所有完数
        for(int i=1; i<1000; i++){
            //判断i是否是完数,如果是就打印i
			/*
			完数?
				一个数如果恰好等于它的因子之和
				例如:6的因子:1,2,3
					1,2,3,6是6的约数,能够把6给整除了
					因子:除了6本身以外的约数
				例如:18的因子:1,2,3,6,9   不是完数
			如何判断i是否是完数?
			(1)先找出i的所有的因子,并且累加它的所有的因子
			(2)判断因子之和与i是否相等,如果相等就是完数
			*/

            //(1)先找出i的所有的因子,并且累加它的所有的因子
            int iSum = 0;
            for(int j=1; j<i; j++){
                //如果j能够把i整除了,j就是i的因子
                if(i%j==0){
                    iSum += j;
                }
            }

            //(2)判断因子之和与i是否相等,如果相等就是完数
            if(i == iSum){
                System.out.println(i);
            }
        }
    }
}

13、foobizbaz

从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。例如:

1565421745221

public class Exercise13 {
    public static void main(String[] args){
        //从1循环到150
        for(int i=1; i<=150; i++){
            //在每行打印一个i的值
            //System.out.println(i);//输出i之后,立刻换行
            System.out.print(i);//只打印i的值

            //每个3的倍数行上打印出“foo”
            if(i%3==0){
                //System.out.println("foo");//输出foo后立刻换行
                System.out.print("\tfoo");//这里加\t是为了好看
            }

            //在每个5的倍数行上打印“biz”
            if(i%5==0){
                System.out.print("\tbiz");
            }

            //在每个7的倍数行上打印输出“baz”
            if(i%7==0){
                System.out.print("\tbaz");
            }

            //最后把这一行的事全部完成后,再换行
            //System.out.print("\n");
            System.out.println();//只打印换行
        }
    }
}

14、百钱买鸡

花100文钱买100只鸡。其中,公鸡5文1只、母鸡3文1只、小鸡1文3只 花100文钱正好买100只鸡,该如何分配?

public class Exercise14 {
	public static void main (String[] args) {
		// 公鸡只数的可能性
		for (int gong = 0; gong <= 20 ;gong++ ) {
			// 母鸡只数的可能性
			for (int mu = 0; mu <= 33 ;mu++ ) {
				// 小鸡只数
				int xiao = 100 - gong - mu;
				// 进行条件的判断
				if ((xiao % 3 == 0) && (gong * 5 + mu * 3 + xiao / 3 == 100)) {
					System.out.println("公鸡有"+gong+"只,母鸡有"+mu+"只,小鸡有"+xiao+"只");
				}
			}
		}
	}
}

版权声明:如无特别声明,本站收集的文章归  HuaJi66/Others  所有。 如有侵权,请联系删除。

联系邮箱: GenshinTimeStamp@outlook.com

本文标题:《 练习-第03章_流程控制语句.md 》

本文链接:/java/%E7%BB%83%E4%B9%A0%E9%A2%98/%E7%AC%AC03%E7%AB%A0_%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6%E8%AF%AD%E5%8F%A5.html