Java for循环如何遍历下一个字符 出现char cannot be dereferenced报错
报错原因
你遇到char cannot be dereferenced报错的核心原因是变量类型定义错误:
- 你把
userInput定义为char基础数据类型,该类型没有charAt()方法,只有String类型支持调用该方法取对应位置的字符 - 原有代码中直接用
scnr.next().charAt(0)仅截取了输入字符串的第一个字符,循环时只能重复处理同一个字符,就是你之前卡的一直处理第0位的问题 - 原有字母判断逻辑用了或运算符,会导致所有字符都满足判断条件,逻辑错误
- 输入提示顺序颠倒,先读输入再弹提示不符合使用逻辑
修复核心点
- 将
userInput的类型从char改为String,存储完整输入内容 - 循环内取到对应位置的字符后,switch改为判断当前取出的单字符
- 调整输入提示顺序,先提示用户输入再读取内容
- 优化循环终止条件,避免输入长度不足7位时触发数组越界
- 补充非字母字符的处理逻辑,输入里的数字可以直接输出
修复后完整代码
import java.util.Scanner; public class PhoneWords { public static void main(String []args){ Scanner scnr = new Scanner(System.in); int numTelephone; // 改为String类型存储完整输入内容 String userInput; // 先提示输入再读取内容 System.out.println("Enter a telephone number using letters (EXIT to quit): "); userInput = scnr.next(); System.out.println("The corresponding telephone number is: "); // 循环终止条件取输入长度和7的最小值,避免越界 for (numTelephone = 0; numTelephone < Math.min(userInput.length(),7); numTelephone++){ char check = userInput.charAt(numTelephone); if (numTelephone == 3){ System.out.print("-"); } // switch判断当前循环到的单个字符 switch (check) { case 'A': case 'a': case 'B': case 'b': case 'C': case 'c': System.out.print("2"); break; case 'D': case 'd': case 'E': case 'e': case 'F': case 'f': System.out.print("3"); break; case 'G': case 'g': case 'H': case 'h': case 'I': case 'i': System.out.print("4"); break; case 'J': case 'j': case 'K': case 'k': case 'L': case 'l': System.out.print("5"); break; case 'M': case 'm': case 'N': case 'n': case 'O': case 'o': System.out.print("6"); break; case 'P': case 'p': case 'Q': case 'q': case 'R': case 'r': case 'S': case 's': System.out.print("7"); break; case 'T': case 't': case 'U': case 'u': case 'V': case 'v': System.out.print("8"); break; case 'W': case 'w': case 'X': case 'x': case 'Y': case 'y': case 'Z': case 'z': System.out.print("9"); break; // 非字母的数字等字符直接输出 default: System.out.print(check); break; } } } }
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

