Java实现数字首尾相加功能遇死循环问题求助
解决你的Java程序终止问题与数字首尾和计算错误
嘿,我帮你排查下代码里的两个核心问题:程序无法终止,以及首尾数字求和的逻辑错误,顺便帮你实现忽略单个数字的需求~
问题1:程序无法终止的原因
你的代码里用了while(scan.hasNextInt())来读取输入,这个方法是阻塞式的——它会一直等待用户输入整数,直到检测到输入流结束(EOF)。在控制台输入时,你需要手动触发EOF信号:
- Windows系统:按下
Ctrl + Z然后回车 - Linux/macOS系统:按下
Ctrl + D
如果想让程序更友好,也可以加个自定义终止条件,比如输入-1或者特定字符来停止输入,我后面的修正代码里会给你示例。
问题2:首尾数字求和的逻辑错误
原代码里的内层while(num[i]>1)完全写错了!它会让数字一直取模10,直接陷入死循环(比如103进入这个循环后,103%10=3,3>1,又取模10还是3,永远跳不出来)。正确的求首位数字的方式应该是不断把数字除以10,直到它小于10,比如103→10→1,这样就得到首位1;末位数字直接取模10就行。
另外,你还没实现忽略单个数字的需求,需要判断数字是否小于10,是的话跳过输出。
修正后的完整代码
import java.util.*; public class AddFirstLastDigit { public static void main(String[] args) { Scanner scan = new Scanner(System.in); ArrayList<Integer> list = new ArrayList<>(); System.out.println("请输入数字(输入非整数或按Ctrl+Z/Ctrl+D结束输入):"); while (scan.hasNextInt()) { list.add(scan.nextInt()); } // 或者用自定义终止条件,比如输入-1停止: // System.out.println("请输入数字(输入-1结束输入):"); // while (true) { // int input = scan.nextInt(); // if (input == -1) { // break; // } // list.add(input); // } for (Integer number : list) { // 忽略单个数字 if (number < 10) { continue; } // 计算末位数字 int lastDigit = number % 10; // 计算首位数字 int firstDigit = number; while (firstDigit >= 10) { firstDigit = firstDigit / 10; } int sum = firstDigit + lastDigit; System.out.println(number + " 的首位与末位之和:" + sum); } scan.close(); } }
代码修改说明
- 给类名改了个更规范的名字
AddFirstLastDigit(Java类名建议大驼峰命名) - 增加了友好的输入提示,让用户知道怎么结束输入
- 修复了首尾数字的计算逻辑:
- 末位数字直接用
number % 10获取 - 首位数字通过不断除以10,直到数字小于10得到
- 末位数字直接用
- 加入了单个数字的判断,用
continue跳过输出 - 提供了可选的自定义终止条件,你可以根据需求切换使用
- 最后关闭了Scanner资源,养成良好的资源回收习惯
测试输入3、103、2045,输出会是:
103 的首位与末位之和:4 2045 的首位与末位之和:7
内容的提问来源于stack exchange,提问作者antara bhattacharya
相关产品推荐
相关产品推荐

