豆豉鲮鱼罐头 2020-07-22 15:07 采纳率: 50%
浏览 272
已采纳

JAVA入门 判定100-999里的水仙花数字 求大佬回答以下问题。

水仙花数 及作业要求

问题:
1. 我们只学了用 int a,b; 来创建两个可键入的变量。如何像图片里一样一次性创建多个可键入变量(中途并换行)。
2. 判定a b区间内有几个水仙花数时,应该用什么方法判断有哪几个数字?(我觉得这块我要创建几个double变量 来对应这几个水仙花数,但应该如何写呢)
3. 如何从大到小列出这几个数字?

(暂且就这三个 问题,希望大佬尽快给予解答)如果可能最好po码上来。

(顺便说一下我的操作环境时eclipse win - 64bit,用的时java se 1.14环境)

  • 写回答

5条回答 默认 最新

  • 毋丶疗 2020-07-22 16:39
    关注

    先解答问题:
    1、Scanner类获取键盘输入
    2、可以建一个集合List存水仙花数,但只要输出的话没有必要,直接输出字符串即可
    3、想要从大到小,调整for循环方向即可
    从大到小:
    for(int i = max; i >= min; i--){
    // 代码
    }
    从小到大:
    for(int i = min; i <= max; i++){
    // 代码
    }

    整体思路:
    1、输入:Scanner键盘输入,可输入多行,对数据进行格式校验(如果保证输入格式没问题,可以省略校验)
    2、数据处理输出:符合条件的数据整理为集合,循环判断是否为水仙花数,判断完成,输出
    3、输出完成进入下一次输入
    先上控制台截图:
    控制台

    public static void narcissus(){
            System.out.println("每行请输入两个数字,可输入多行,两次回车返回结果!");
            // 存储输入的字符串,每次输出后清空
            List<String> strList = new ArrayList<>();
            Scanner sc = new Scanner(System.in);
            while(sc.hasNextLine()){
                String str = sc.nextLine().trim();
                if(!"".equals(str)){
                    // 数字个数校验
                    if(str.split("\\s+").length == 2){
                        // 是否只有数字和空格校验
                        String pattern = "[\\d\\s]+";
                        Matcher meq = Pattern.compile(pattern).matcher(str);
                        if(meq.matches()){
                            strList.add(str);
                        }else{
                            System.out.println("包含数字和空格以外的字符: " + str);
                        }
                    }else{
                        System.out.println("请检查输入数字个数是否为两个: " + str);
                    }
                }else{   // 输入为空,则进行水仙花数判断及输出
                    System.out.println("输出如下:");
                    for(String s : strList){
                        // 分割,判断两个数字的大小
                        String[] strArray = s.split("\\s+");
                        int first = Integer.valueOf(strArray[0]);
                        int second = Integer.valueOf(strArray[1]);
                        int min = first, max = second;
                        if(first > second){
                            min = second;
                            max = first;
                        }
                        // 水仙花数为三位数,超出此范围直接输出 no ,进行下一次循环
                        if(max < 100 || min > 999){
                            System.out.println("no");
                            continue;
                        }
                        // 判断 输出
                        String outStr = "";
                        for(int i = min;i<= max; i++){
                            int hun = i / 100;
                            int ten = i % 100 / 10;
                            int one = i % 10;
                            if(i == (hun*hun*hun + ten*ten*ten + one*one*one)){
                                outStr += i +" ";
                            }
                        }
                        if(!"".equals(outStr)){
                            System.out.println(outStr);
                        }else{
                            System.out.println("no");
                        }
                    }
                    // 集合清空,接收下一次输入
                    strList = new ArrayList<>();
                    System.out.println();
                    System.out.println("每行请输入两个数字,可输入多行,两次回车返回结果!");
                }
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决