有关程序流程控制的题目

1、Scanner的使用

  •    需要这个包:import java.util.Scanner;
  • 对于char型的获取,Scanner没有提供相应的方法,只能获取一个字符串

例如以下输入:nan    通过  gender.charAt(0)可得到第0个字符串。即 n

//Scanner的实例化
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入期末成绩:");

        int score = scanner.nextInt();
        if(score==100){
            System.out.println("奖励一台BMW");
        } else if (80<score &&score<=99) {
            System.out.println("一台iphone");
        } else if (60<=score && score<=80) {
            System.out.println("一台ipad");
        }else {
            System.out.println("none");
        }

        //对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串
        System.out.println("请输入你的性别(男或女)");
        String gender = scanner.next();
        char genderchar = gender.charAt(0);  //获取索引为0位置上的字符
        System.out.println(genderchar);

结果如下: 

2、if-else的有关例题

2.1、彩票问题

 说明:

  • 需要用到Math.random()方法获得随机数,要想获得[a,b] 范围内的数,有公式:
    (int) (Math.random()*(b-a+1)+a);
  • 如何获得两位数的个位数和十位数?个位数需要 此两位数%10,十位数需要此两位数/10
  • 后面根据题目,进行逻辑判断即可
public static void main(String[] args) {
        //彩票问题
        //如何获取一个随机数:10-99
        int value = (int) (Math.random()*90+10);
        System.out.println(value);
        //公式:[a,b] : (int) (Math.random()*(b-a+1)+a);
        //获得十位数以及个位数
        int valueshi = value/10;
        int valuege = value%10;

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入两位数");

        int num = scanner.nextInt();
        int numshi = num/10;
        int numge = num%10;

        if(num == value){
            System.out.println("奖金10000元");
        }else if (valueshi == numge && valuege == numshi){
            System.out.println("奖金3000元");
        }else if(valueshi==numshi || valuege == valuege){
            System.out.println("奖金1000元");
        }else if(valueshi==numge || valuege == numshi){
            System.out.println("奖金500元");
        }else {
            System.out.println("没中奖");
        }
        System.out.println("中将号码是" + value);
    }

 2.2、高富帅问题

 说明:

  • 这里需要用到equals方法来判断输入的字符串与给定字符串是否一样(即帅的是与否)shu
//高富帅问题
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("身高(cm):");
        int height = scanner.nextInt();

        System.out.println("金钱(千万):");
        int money = scanner.nextInt();

        /*System.out.println("帅吗(true/false):");
        boolean face = scanner.nextBoolean();


        if (height>180 && money>10000000 && face==true){
            System.out.println("一定嫁");
        } else if (height>180 || money>10000000 || face==true) {
            System.out.println("勉强");
        }else {
            System.out.println("不嫁");
        }*/

        //方式二
        System.out.println("帅吗(是/否):");
        String face = scanner.next();
        if (height>180 && money>10000000 && face.equals("是")){
            System.out.println("一定嫁");
        } else if (height>180 || money>10000000 || face.equals("是") ){
            System.out.println("勉强");
        }else {
            System.out.println("不嫁");
        }
    }

 3、Switch - case有关例题

说明:

  • switch结构中的表达式,只能是如下的6种数据类型之一: byte . short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
  • case 之后只能声明常量,不能声明范围
  • break关键字是可选的
  • default相当于if-else结果中的else default结构是可选的。 default位置是灵活的

3.1对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

  • 可以通过成绩除60来进行简化,比60大则得到1,比60小则得到0
//对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
    public static void main(String[] args) {
        /*Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩");
        int score = scanner.nextInt();

        switch (score/10){
            case(0):
            case(1):
            case(2):
            case(3):
            case(4):
            case(5):
                System.out.println("不及格");
                break;
            case(6):
            case(7):
            case(8):
            case(9):
            case(10):
                System.out.println("及格");
                break;*/

            //更优的解决方法
            switch (score/60){
                case (0):
                    System.out.println("不及格");
                    break;
                case (1):
                    System.out.println("及格");
                    break;
            }

3.2、从键盘分别输入年、月、日,判断这一天是当年的第几天

  • 需要判断输入的年份是否是闰年来判断当前2月份有多少天(闰年有29天)
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入yaer:");
        int year = scanner.nextInt();
        System.out.println("请输入month:");
        int  month = scanner.nextInt();
        System.out.println("请输入day:");
        int day = scanner.nextInt();
        int sumDays = 0;

        switch (month){
            case 12:
                sumDays += 30;
            case 11:
                sumDays +=31;
            case 10:
                sumDays +=30;
            case 9:
                sumDays +=31;
            case 8:
                sumDays +=31;
            case 7:
                sumDays +=30;
            case 6:
                sumDays +=31;
            case 5:
                sumDays +=30;
            case 4:
                sumDays +=31;
            case 3:
                if((year % 4 ==0 && year % 100 !=0)|| year % 400 ==0) {
                     sumDays +=29;
                }else {
                    sumDays +=28;
                }

            case 2:
                sumDays +=31;
            case 1:
                sumDays +=day;

        }
        System.out.println(year + "年"+month + "月" + day + "是当年的第" + sumDays + "天");

    }

4、for循环

4.1、输入两个正整数m和n,求其最大公约数和最小公倍数。比如:12和20的最大公约数是4,最小公倍数是60。

说明:

  • 最大公约数需要取两个数中的较小值进行if操作(最大公约数比较小值小,但是比1大)
  • 最小公倍数需要取两个数中较大的值(最小公倍数比较大值大,但是小于两数的积)
Scanner scanner  = new Scanner(System.in);
        System.out.println("输入第一个正整数");
        int m = scanner.nextInt();
        System.out.println("输入第二个正整数");
        int n = scanner.nextInt();

        //获取两个数中的较小值
        int min  = (m>=n)? n : m;
        for (int i = min;i>=1;i--){
            if(m % i ==0 && n % i ==0){
                System.out.println("最大公约数为:" + i);
                break;//
            }
        }
        int max = (m>=n)? m: n;
        for(int i = max;i<=m*n;i++){
            if(i % m == 0 && i % n ==0){
                System.out.println("最小公倍数为:" + i);
                break;
            }
        }

4.2、输出所有三位水仙花数 

水仙花数:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

说明:

  • 三位数取个位需要对10取余
  • 三位数取十位数需要/10在对10取余
  • 三位数取白位需要/10
 public static void main(String[] args) {
        for (int i = 100; i < 1000; i++) {
            int j = i % 10;         //个位
            int k = i / 10 % 10;    //十位
            int l = i / 100;        //百位
            if (i==(j*j*j)+(k*k*k)+(l*l*l)) {
                System.out.println("三位数的水仙花数有"+ i + " " );
            }

        }
    }

 4.3、编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行,上打印出“foo",在每个5的倍数行上打印“biz",在每个7的倍数行上打印输出“baz”。

 说明:

  • 写上if循环继续写下一个if循环,因为有的数即是3的倍数也是5的倍数,需要判断多次
 public static void main(String[] args) {

        for (int num = 1; num <= 150 ; num++){

            System.out.print(num + "  ");

            if(num % 3 == 0){
                System.out.print("foo ");
            }
            if(num % 5 == 0){
                System.out.print("biz " );
            }
            if (num % 7 == 0) {
                System.out.print("baz ");
            }
            //换行
            System.out.println();

        }
    }

 5、while循环

5.1、输出0-100的偶数

while循环与for循环区别:while循环定义的变量,出了循环还能用,但是for循环不行

public static void main(String[] args) {
        //输出0-100的偶数
        int i = 1;
        while(i<=100){
            if(i % 2 == 0){
                System.out.println(i);
            }
            i++;
        }
        //与for循环有区别,i出了循环还能用 

        System.out.println(i);
    }

 6、do--while

do - while循环至少会执行一次循环体! 例如以下代码,会输出do-while,不会输出while

6.1输出0-100的偶数 并计算偶数的和以及所有偶数的个数

 public static void main(String[] args) {
        //输出0-100的偶数  并计算偶数的和以及所有偶数的个数
        int i = 1;
        int sum = 0;
        int count = 0;
        do{
            if(i % 2 ==0){
                System.out.println(i);
                sum +=i;
                count++;
            }
            i++;
        }while(i<=100);
        System.out.println("总和为:" + sum);
        System.out.println("个数为:" + count);

        int num1 = 10;
        while (num1>10){
            System.out.println("while");
            num1--;
        }

        int num2 = 10;
        do {
            System.out.println("dowhile");
            num2--;
        }while (num2>10);

    }

7、嵌套循环

内层循环结构遍历一遍,只相当于外层循环结构体执行了一次

假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m*n次

7.1输出九九乘法表、三角形以及倒三角

外层变量控制行数

内层变量控制列数

public static void main(String[] args) {
        //System.out.println("******");
        for (int i = 1; i <= 6; i++) {
            System.out.print('*');
        }
        System.out.println("\n ");
        System.out.println("-------------------------");
        /*想要以下输出
         * ******
         * ******
         * ******
         * ******
         * */
        for (int j = 1; j <= 4; j++) {
            for (int i = 1; i <= 6; i++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("-------------------------------");


        /* 想要以下输出         i (行号)     j(*的个数)
         * *                  1            1
         * **                 2            2
         * ***                3            3
         * ****               4            4
         * *****              5            5
         * */
        for (int i = 1; i <= 5; i++) {         //控制行数
            for (int j = 1; j <= i; j++) {   //控制列数
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("---------------------------");

        /*  想要以下输出           i (行号)     j(*的个数)      i+j = 5  j=5-i
         * ****                      1            4
         * ***                       2            3
         * **                        3            2
         * *                         4            1
         * */
        for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <= 5 - i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("-----------------------------------");
        /*   想要以下输出
         * *
         * **
         * ***
         * ****
         * *****
         * ****
         * ***
         * **
         * *
         * */
        for (int i = 1; i <= 5; i++) {         //控制行数
            for (int j = 1; j <= i; j++) {   //控制列数
                System.out.print("*");
            }
            System.out.println();
        }
        for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <= 5 - i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("-----------------------");
         //九九乘法表
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + (i*j) + "  ");
            }
            System.out.println();
        }

7.2、输出100以内的质数(优化方法以及比较)

比较可通过System.currentTimeMillis()方法来比较,此方法为获取当前时间距离1970-01-01 00:00:00 的毫秒数,可通过比较时间来比较算法的优化程度

优化1  只对本身非质数的自然数是有效的。

优化2  对本身是质数的自然数是有效的。

public static void main(String[] args) {
		
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
		int count = 0;//记录质数的个数

		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long start = System.currentTimeMillis();

		for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
			
			//优化二:对本身是质数的自然数是有效的。
			//for(int j = 2;j < i;j++){
			for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除
				
				if(i % j == 0){ //i被j除尽
					isFlag = false;
					break;//优化一:只对本身非质数的自然数是有效的。
				}
				
			}
			//
			if(isFlag == true){
				//System.out.println(i);
				count++;
			}
			//重置isFlag
			isFlag = true;
		
		}

		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("质数的个数为:" + count);
		System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13

	}

时间比较:17110 - 优化一:break:1546 - 优化二:13

最终简便代码,通过continue标签来进行处理

说明:

  • Math.sqrt为平方根运算函数
  • break为结束当前循环
  • continue为结束当次循环
 public static void main(String[] args) {


                int count = 0;//记录质数的个数

                //获取当前时间距离1970-01-01 00:00:00 的毫秒数
                long start = System.currentTimeMillis();

                label:for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数

                    for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除

                        if(i % j == 0){ //i被j除尽
                            continue label;
                        }

                    }
                    //能执行到此步骤的,都是质数
                    count++;

                }

                //获取当前时间距离1970-01-01 00:00:00 的毫秒数
                long end = System.currentTimeMillis();
                System.out.println("质数的个数为:" + count);
                System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13

            }
        }

补充:可能有的表达不清楚,可以看看代码,代码里面有注释。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值