Java不使用数组如何查找输入最大整数及其出现次数
问题解答
核心疑问回复
- 是否可以仅用if else实现该功能?
不行。由于用户输入的整数数量不固定,if else仅能处理预设好固定数量的输入场景,因此必须使用循环实现动态读取不定数量的输入。 - 如何实现同一行读取多个用户输入?
Scanner类的nextInt()方法会自动跳过空格、制表符、换行符等分隔符,无论用户是将多个整数写在同一行还是分多行输入,都可以正常逐个读取,不需要额外处理。 - 哨兵值设置问题
使用0作为终止哨兵值是可行的,你原代码的报错/死循环问题是逻辑错误导致,和哨兵值选择无关。
原代码存在的问题
max初始值设置错误:固定初始化为1,若所有输入的整数都小于1,最终得到的最大值结果错误,应该将第一个用户输入的值作为初始max- 循环体未读取新输入:循环体内没有再次调用
input.nextInt()获取新值,导致userInput永远是第一次输入的值,进入死循环 - 最大值更新逻辑错误:不需要交换
userInput和max的值,直接将max赋值为当前更大的userInput即可,且更新最大值时需要将count重置为1 - 结果输出位置错误:输出语句写在循环内部,会每次输入后都打印一次结果,应该移到循环结束后再输出最终结果
- 初始count计数逻辑错误:第一个输入作为初始最大值时,count就应该初始化为1
修正后的完整代码
package myjavaprojects2; import java.util.*; public class Max_number_count { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入整数,输入0结束:"); int userInput = input.nextInt(); // 处理输入哨兵值直接结束的特殊情况 if (userInput == 0) { System.out.println("未输入有效整数"); return; } // 初始化最大值和计数 int max = userInput; int count = 1; while (userInput != 0) { if (userInput > max) { max = userInput; count = 1; // 出现新最大值,重置计数为1 } else if (userInput == max) { count++; } // 读取下一个输入 userInput = input.nextInt(); } // 循环结束后输出最终结果 System.out.println("The max number is " + max ); System.out.println("The count is " + count ); } }
内容的提问来源于stack exchange,提问作者Trevon Corbett
相关产品推荐
相关产品推荐

