十六进制转十进制转换器开发求助:输出变量无结果(校园竞赛项目)
修复你的十六进制转十进制转换器问题
嘿,我帮你定位到程序无法正常输出的关键问题了!你的代码现在只打印初始空的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
相关产品推荐
相关产品推荐

