Java三位数奇偶替换程序故障:输入123替换后无预期输出
问题排查与修复方案
核心问题(直接导致无输出的原因)
输入123时,百位数字是1(奇数),而原代码中所有替换逻辑都嵌套在if(h%2==0)块内——这个条件不成立,所以整个替换、结果计算的代码都没执行,程序直接跳过该块结束。
其他关键错误
- 分支结构逻辑错误:用
else if串联各个位的判断,导致同一时间只能处理一个偶数位,甚至百位非偶时完全不处理其他位。需改成独立的if判断,确保三个位都能被检查。 - 结果计算变量错误:原代码计算新数时写了
fn=z*100+z1*10+z;,最后一位误用了百位替换值z,应该用个位替换值z2。 - 变量初始化不合理:
z、z1、z2初始为0,但对应位是奇数无需替换时,应该保留原数字而非0。 - 细节错误:
- 替换个位的提示文本写错变量,把
o写成了h; - 检查十位替换值是否为奇数时,错误判断了
z%2==0,应该判断z1%2==0; - 末尾
else if(2==2)属于无效冗余逻辑。
- 替换个位的提示文本写错变量,把
修正后的代码
// 输入三位数,检测偶数位,用奇数替换后输出新数 import java.util.Scanner; public class p24123 { public static void main(String[] args) { int n, h, t, o, fn; Scanner ob = new Scanner(System.in); n = ob.nextInt(); if (n > 99 && n < 1000) { // 拆分百位、十位、个位 h = n / 100; t = (n / 10) % 10; o = n % 10; // 初始化替换值为原数字,无需替换时直接保留 int z = h; int z1 = t; int z2 = o; // 检查百位是否为偶数,是则替换 if (h % 2 == 0) { System.out.println("请输入奇数替换百位的偶数数字 " + h + ":"); z = ob.nextInt(); if (z % 2 == 0) { System.out.println("输入的不是奇数,将保留原数字"); z = h; } } // 检查十位是否为偶数,是则替换 if (t % 2 == 0) { System.out.println("请输入奇数替换十位的偶数数字 " + t + ":"); z1 = ob.nextInt(); if (z1 % 2 == 0) { System.out.println("输入的不是奇数,将保留原数字"); z1 = t; } } // 检查个位是否为偶数,是则替换 if (o % 2 == 0) { System.out.println("请输入奇数替换个位的偶数数字 " + o + ":"); z2 = ob.nextInt(); if (z2 % 2 == 0) { System.out.println("输入的不是奇数,将保留原数字"); z2 = o; } } // 计算并输出新数 fn = z * 100 + z1 * 10 + z2; System.out.println("替换后的新数为: " + fn); } else { System.out.println("请输入有效的三位数"); } ob.close(); } }
内容的提问来源于stack exchange,提问作者AsderSynth
相关产品推荐
相关产品推荐

