You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:10:54