Java程序无法输出符合条件的四位数,求技术排查协助
排查Java四位数筛选程序问题
嘿,我来帮你搞定这个问题!先确认下你要找的9837确实完全符合所有条件:四个数字互不重复、千位9是十位3的3倍、个位7是奇数、数字和9+8+3+7=27,完全正确。你的程序没输出结果,大概率是逻辑判断或者数位拆分出了问题,我来帮你梳理下常见坑和修正方案:
可能的问题点
- 循环范围错误:你有没有确保循环覆盖了所有四位数(1000到9999)?如果循环起始或结束值不对,可能直接跳过了目标数。
- 数位拆分错误:拆分千位、百位、十位、个位时很容易算错,比如十位应该是
(num / 10) % 10,写错的话会导致后续判断全部失效。 - 四数字互不相同的判断遗漏:要确保所有两两数位都不相等,比如不能只判断千位≠百位、千位≠十位,还得检查百位≠十位、百位≠个位、十位≠个位,漏一个都可能筛掉正确结果。
- 千位与十位的关系搞反:条件应该是
千位数字 == 十位数字 *3,要是写成十位数字 == 千位数字 *3,那完全找不到符合的数了。 - 条件组合用错运算符:必须用
&&(逻辑与)把所有条件连起来,要是用了||(逻辑或),会输出一堆不符合的数,或者因为逻辑不对漏掉目标。
修正后的完整代码
我把正确的逻辑写成了完整程序,你可以参考对比自己的代码:
public class Batman { public static void main(String[] args) { // 遍历所有四位数 for (int num = 1000; num <= 9999; num++) { // 正确拆分各个数位 int thousand = num / 1000; int hundred = (num / 100) % 10; int tens = (num / 10) % 10; int unit = num % 10; // 逐一验证所有条件 boolean isFourDifferent = (thousand != hundred) && (thousand != tens) && (thousand != unit) && (hundred != tens) && (hundred != unit) && (tens != unit); boolean isThousand3TimesTens = thousand == tens * 3; boolean isOdd = unit % 2 != 0; boolean isSum27 = (thousand + hundred + tens + unit) == 27; // 所有条件满足时输出结果 if (isFourDifferent && isThousand3TimesTens && isOdd && isSum27) { System.out.println("符合条件的数:" + num); } } } }
代码关键点说明
- 循环严格覆盖1000到9999的所有四位数,不会漏掉任何可能的数。
- 数位拆分的方式简单直接,避免计算错误。
- 四数字不同的判断覆盖了所有两两组合,确保没有重复数字。
- 所有条件用
&&连接,只有当全部满足时才会输出结果。
你可以把自己的代码和这个版本对比,看看是哪一步出了问题,应该就能解决啦!
内容的提问来源于stack exchange,提问作者user3663055
相关产品推荐
相关产品推荐

