Java流程控制if-else结构的一道小综合题

 

B站尚硅谷的JavaSE 0基础教程P100的一道题,感觉挺有意思的,做个对比

题目

在这里插入图片描述

我写的(额。。稍微改了点什么)

import java.util.Scanner;

public class App {
/*这是一个彩票系统,用户输入两位数的彩票号与随机数进行匹配*/
    public static void main(String[] args) throws Exception {
        boolean more = true;
        Scanner input = new Scanner(System.in);

        System.out.println("********彩票中奖系统********");
        System.out.println("规则:彩票为两位正整数,系统自动与彩票号对比");
        System.out.println("一等奖:若数值完全匹配,则奖励¥10,000");
        System.out.println("二等奖:若顺序不匹配,则奖励¥3,000");
        System.out.println("三等奖:若顺序情况下匹配一个数值,则奖励¥1,000");
        System.out.println("四等奖:若非顺序情况下匹配一个数值,则奖励¥500");
        System.out.println("谢谢惠顾:若无任何值匹配,则该彩票作废\n");

        while(more) {
            int num = (int)(Math.random() * 90 + 10); // 获取随机数
            int numTen = num / 10; // 获取随机数的十位
            int numOne = num % 10; // 获取随机数的个位

            System.out.println("请输入彩票号:");
            int inputNum = input.nextInt();

            int inputNumTen = inputNum / 10; // 获取彩票号的十位
            int inputNumOne = inputNum % 10; // 获取彩票号的个位

            if(inputNum < 10 || inputNum > 99) { // 判断数值是否非法
                System.out.println("您输入的彩票号不合法,是否重新输入?true/false");
                more = input.nextBoolean();
            }else{ // 当输入数值合法时
                System.out.println("您输入的彩票号为:" + inputNum);
                System.out.println("中奖彩票号为:" + num);

                if(inputNum == num) { // 当数值完全匹配时
                    System.out.println("恭喜,您中了一等奖,奖励¥10,000");

                }else if(inputNumTen == numOne && inputNumOne == numTen) { // 当顺序不匹配时
                    System.out.println("恭喜,您中了二等奖,奖励¥3,000");

                }else if(inputNumTen == numTen || inputNumOne == numTen) { // 当彩票号匹配第一个数时(第二个数一定不匹配)
                    if(inputNumTen == numTen) { // 顺序匹配
                        System.out.println("恭喜,您中了三等奖,奖励¥1,000");
                    }else // 顺序不匹配
                        System.out.println("恭喜,您中了四等奖,奖励¥500");

                }else if(inputNumTen == numOne || inputNumOne == numOne) { // 当彩票号匹配第二个数时(第一个数一定不匹配)
                    if(inputNumOne == numOne) { // 顺序匹配
                        System.out.println("恭喜,您中了三等奖,奖励¥1,000");
                    }else // 顺序不匹配
                        System.out.println("恭喜,您中了四等奖,奖励¥500");

                }else // 没有一个匹配时
                    System.out.println("谢谢惠顾");

                System.out.println("是否继续兑换?true/false");
                more = input.nextBoolean();
            }
            if(more == false)
                System.out.println("欢迎下次光临!");
        }
    }
}

 

 

输出

在这里插入图片描述

标准答案

import java.util.Scanner;

class TestCaiPiao{
    public static void main(String[] args) {
        //1、随机产生一个两位数
        //System.out.println(Math.random());//产生[0,1)
        int number = (int)(Math.random() * 90 + 10);//得到[10,99],即[10,100)
        //System.out.println(number);
        
        int numberShi = number / 10;
        int numberGe = number % 10;

        //2、用户输入一个两位数
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个两位数:");
        int guess = input.nextInt();

        int guessShi = guess / 10;
        int guessGe = guess % 10;

        if(number == guess) {
            System.out.println("奖金10 000美元");
        }else if(numberShi == guessGe && numberGe == guessShi) {
            System.out.println("奖金3 000美元");
        }else if(numberShi == guessShi || numberGe == guessGe) {
            System.out.println("奖金1 000美元");
        }else if(numberShi == guessGe || numberGe == guessShi) {
            System.out.println("奖金500美元");
        }else {
            System.out.println("没中奖");
        }
        System.out.println("中奖号码是:" + number);
    }
}

 

 

输出

在这里插入图片描述

不过B站有网友发现了个问题

在这里插入图片描述
嘿,是个好问题,我们来研究研究

我把自己的代码改了一下

在这里插入图片描述
输出结果为:

在这里插入图片描述
把标准答案的代码改一改
在这里插入图片描述
输出结果为:

在这里插入图片描述
答案是一样的。

分析:由于我自己的代码跟标准答案的代码都是先判断输入彩票号的顺序情况,再判断非顺序情况的,所以当输入的彩票号的两个数值都与随机数中的一个相同时,系统会先判断顺序情况下的相同,然后跳出if-else结构,不再往下执行。

那么,把判断条件换个位置看看(以标准答案的为例):

在这里插入图片描述
输出结果为:

下面的输出是改过之后的
果然是这样(下面的输出是改过之后的)。

虽说用if-else结构在有优先级的情况下判断是个很好的办法,但是在题目中并没有设置这些情况的优先级。所以以上两种结果都是对的。

posted @ 2021-01-04 08:38  🍊爱吃橙子的丸子  阅读(135)  评论(0编辑  收藏  举报