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

水仙花数 及作业要求

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

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

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

先解答问题:
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("每行请输入两个数字,可输入多行,两次回车返回结果!");
            }
        }
    }

1.读行,然后用空格分割出每一个数据(实际就是一行有两个数据,m和n)
2.循环从m开始 结束条件为m=n,自增1 然后在循环体内进行判断是否为水仙花,如果是就直接输出,
3.如果是从m开始到n结束,那么输出的顺序就是小到大,如果要大到校,那么就从n开始 递减1到m结束

提供下读一行的思路代码

    Scanner sc = new Scanner(System.in);
//        读取一行数据
        String s = sc.nextLine();
//        用空格分隔
        String[] strings = s.split(" ");
        int m = Integer.parseInt(strings[0]);
        int n = Integer.parseInt(strings[1]);
        int result = 0;//0为有水仙花,1为无
        for(int i = m ; m<=n ; i++){
            int a = i%10;//个位
            int b = i/10%10;//十位
            int c = i/100;//百位
            if((a*a*a + b*b*b + c*c*c) ==i){
                System.out.printf("%d "+i);
                result=1;
            }
        }
        if(result==0)System.out.printf("no");
        System.out.println();

public class ShuiXianHuaShu {

public static void main(String[] args) {

    int count = 0;

    for (int i = 100; i < 1000; i++) {
        int ge = i % 10;
        int shi = i / 10 % 10;
        int bai = i / 100;

        if (i == ge * ge * ge + shi * shi * shi + bai * bai * bai) {
            System.out.println(i + "是水仙花数");
            count++;
        }
    }
    System.out.println("一共有" + count + "个水仙花数");
}

}

    //输入m,n
            Scanner sc1 = new Scanner(System.in);
    Scanner sc2 = new Scanner(System.in);
    System.out.println("请输入整数m");
    int m = sc1.nextInt();
    System.out.println("请输入整数n");
    int n = sc2.nextInt();
            //输出水仙花数个数
    int count = 0;
            //逻辑
    for (int i = 0; i <= 9; i++) {
        int i1 = i * 100;
        for (int j = 0; j <= 9; j++) {
            int j1 = j * 10;
            for (int k = 0; k <= 9; k++) {
                int k1 = k;
                if (i * i * i + j * j * j + k * k * k == i1 + j1 + k1 && i1 + j1 + k1 > m && i1 + j1 + k1 < n) {
                    count++;
                                            //同一行输出,空格隔开
                     System.out.print(i1 + j1 + k1+" ");
                    }
                }
            }
        }
                    //如果没有输出水仙花数,那就输出no
        if (count == 0){
            System.out.println("no");
        }

1.用while(true)即可

2.依次循环遍历从m到n之间的数,把每个数的个位、十位、百位上的数字提取出来,分别求立方后再求和看看是否等于原来那个数字,若等于则输出;若不等于,则进行下一个数字的计算

3.若从小到大,第二问的答案已给出,即从小到大遍历判断;若从大到小,可以从大到小进行遍历判断

代码

import java.util.*;
public class flower {
    public static void main(String[] args) {
        int m,n;
        Scanner sc=new Scanner(System.in);
        while(true) {
            m=sc.nextInt();   //输入的m
            n=sc.nextInt();   //输入的n
            int s=0;          //水仙花个数统计
            for(int i=m; i<=n; i++) {
                int a=i/100;       //提取百位上的数字
                int b=(i%100)/10;   //提取十位上的数字
                int c=i%10;         //提取个位上的数字
                if(a*a*a+b*b*b+c*c*c==i) {  //进行水仙花数判断
                    s++;
                    System.out.print(i);
                    System.out.print(' ');
                }
            }
            if(s==0){      //如果没有水仙花数
                System.out.println("no");
            }
            else{
                System.out.println();
            }
        }
    }
}

结果截图

图片说明