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("每行请输入两个数字,可输入多行,两次回车返回结果!");
}
}
}
以上是 JAVA入门 判定100-999里的水仙花数字 求大佬回答以下问题。 的全部内容, 来源链接: utcz.com/a/34512.html