Java程序for循环未返回数组各索引对应不同值的问题排查
问题分析与修复方案
核心错误点
- getNumber方法提前返回,仅处理第一个字符
原代码第一个for循环里,刚完成第一个字符的数值赋值就执行return intArray[i];,导致方法直接跳出,后续字符的处理逻辑完全不会运行,每次调用都只返回第一个字符的数值。 - main方法逻辑重复调用错误
main里的while循环每次都传入整个字符串调用getNumber,而getNumber只会返回第一个字符的结果,循环多少次就重复输出多少次第一个字符的数值,自然所有输出都一样。
修复后的代码
import java.util.Scanner; public class StringtoNumber { // 单个字符转对应数字的方法 public static int getNumber(char c) { // 统一转大写,减少重复case判断 switch (Character.toUpperCase(c)) { case 'A': case 'B': case 'C': return 2; case 'D': case 'E': case 'F': return 3; case 'G': case 'H': case 'I': return 4; case 'J': case 'K': case 'L': return 5; case 'M': case 'N': case 'O': return 6; case 'P': case 'Q': case 'R': case 'S': return 7; case 'T': case 'U': case 'V': return 8; case 'W': case 'X': case 'Y': case 'Z': return 9; default: return 0; // 处理非字母输入 } } // 直接将整个字符串转换为加密数字的方法(用long避免溢出) public static long getEncryptedNumber(String word) { long result = 0; for (char c : word.toCharArray()) { result = result * 10 + getNumber(c); } return result; } public static void main(String[] arg) { Scanner input = new Scanner(System.in); System.out.println("what word do you want to encrypt"); String word = input.nextLine(); // 方式1:逐个输出每个字母对应的数字 for (char c : word.toCharArray()) { System.out.print(getNumber(c)); } System.out.println(); // 方式2:直接输出完整的加密数字 System.out.println(getEncryptedNumber(word)); } }
修复说明
- 拆分原getNumber方法,让它专门处理单个字符,避免提前返回的问题,同时通过转大写简化case判断。
- main方法改为遍历字符串的每个字符,逐个调用getNumber,确保每个字母都被正确转换。
- 新增
getEncryptedNumber方法,直接生成完整的加密数字,使用long类型避免字符串过长时int溢出的问题。
内容的提问来源于stack exchange,提问作者kelkrekeksa
相关产品推荐
相关产品推荐

