Java整数转字符串后逻辑异常:程序返回空ArrayList问题排查
问题排查与代码修正
核心问题分析
字符转数字逻辑错误:
number.charAt(i)返回的是字符的ASCII值(例如字符'1'对应的ASCII是49),直接强转成int后用于取模,完全不符合你预期的「用数字本身做除数」的逻辑。正确转换方式是number.charAt(i) - '0',这样字符'1'会转换成整数1,以此类推。添加错误数值到列表:
你在判断条件前就执行了left++,导致添加到列表的是自增后的left,而非原本符合条件的数。比如left=1时,自增后变成2,你添加的是2而不是1,这直接导致所有符合条件的数都被错误替换。潜在的除数为0异常:
若遇到包含0的数字(如10、20),left % 0会抛出ArithmeticException,虽然你的目标输出里没有这些数,但建议添加判断跳过0的情况,避免程序崩溃。
修正后的代码
import java.util.ArrayList; public class My_first { public static void main(String[] args) { int left = 1, right = 22; ArrayList<Integer> num = new ArrayList<>(); while (left <= right) { String number = Integer.toString(left); int count = 0; boolean valid = true; for (int i = 0; i < number.length(); i++) { int digit = number.charAt(i) - '0'; // 跳过除数为0的情况 if (digit == 0) { valid = false; break; } if (left % digit == 0) { count++; } } // 先判断条件,再自增left if (valid && count >= number.length()) { num.add(left); } left++; } System.out.println(num); } }
执行后会输出[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22],与你的期望一致。
内容的提问来源于stack exchange,提问作者Indra Sekar
相关产品推荐
相关产品推荐

