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

十六进制转十进制转换器开发求助:输出变量无结果(校园竞赛项目)

修复你的十六进制转十进制转换器问题

嘿,我帮你定位到程序无法正常输出的关键问题了!你的代码现在只打印初始空的text变量,主要是两个逻辑错误导致的,下面一步步给你讲清楚:

问题1:错误的字符串比较方式

在Java中,用==比较字符串时,比较的是对象的内存引用地址,而不是字符串的实际内容。你这段代码里:

if(String.valueOf(c2)==g[h]) {
    text += String.valueOf(h+10);
}

永远不会触发,因为String.valueOf(c2)是新创建的字符串对象,和g[h]的引用地址不一样。

修复方案:改用equals()方法比较字符串内容,或者更高效的方式——直接比较字符:

// 方式1:用equals比较字符串
if(String.valueOf(c2).equals(g[h])) {
    text += String.valueOf(h+10);
}

// 方式2:直接比较字符(推荐,更高效)
if(c2 == abc.charAt(h)) {
    text += String.valueOf(h+10);
}

问题2:数字字符的判断逻辑错误

你用Integer.valueOf(c2)来判断是否是数字字符,这是错误的——因为Integer.valueOf(c2)返回的是该字符的ASCII码值(比如字符'0'的ASCII是48,'9'是57),所以你的判断条件>=0&&<=9永远不会成立,数字部分也无法添加到text里。

修复方案:直接比较字符的Unicode值(和ASCII码一致):

if(c2 >= '0' && c2 <= '9') {
    text += String.valueOf(c2);
}

修正后的完整代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        String[] g = new String[6];
        String abc = "ABCDEF";
        for(int i =0; i<= g.length-1;i++) {
            char c = abc.charAt(i);
            g[i] = String.valueOf(c);
        }
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a hexadecimal code:");
        String inp = sc.nextLine();
        sc.close();
        String text ="";
        for(int i =0;i<=inp.length()-1;i++) {
            char c2 = inp.charAt(i);
            boolean isLetter = false;
            for(int h =0;h<=g.length-1;h++) {
                // 改成equals比较字符串内容
                if(String.valueOf(c2).equals(g[h])) {
                    text += String.valueOf(h+10);
                    isLetter = true;
                    break; // 找到匹配后跳出循环,提升效率
                }
            }
            // 如果不是字母,再判断是否是数字
            if(!isLetter && c2 >= '0' && c2 <= '9') {
                text += String.valueOf(c2);
            }
        }
        System.out.println(text);
    }
}

额外小提示

如果竞赛项目允许使用内置方法的话,其实Java已经提供了更简洁的实现方式,一行代码就能完成十六进制转十进制:

// 注意:Integer.parseInt支持大小写十六进制字符,无需额外转换
int decimal = Integer.parseInt(inp, 16);
System.out.println(decimal);

内容的提问来源于stack exchange,提问作者Botond Vastag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:48