VSCode运行Java两数之和代码报错,在线编译器正常求解决
解决Java编译报错:cannot find symbol: variable out in class System
问题重现
编译两数之和的Java代码时出现如下错误:
chenchureddy@Chenchus-MBP Java % cd "/Users/chenchureddy/PROGRAMMING/Java/" && javac TwoSum.java && java TwoSum TwoSum.java:36: error: cannot find symbol System.out.println("the indices are :"+ result[0]+" and "+result[1]); ^ symbol: variable out location: class System Note: TwoSum.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 1 error
对应的代码如下:
import java.util.HashMap; import java.util.Map; import java.util.*; class TwoSum{ public static int[] twoSum(int[] numbers, int target) { int[] result = new int[2]; Map <Integer,Integer> map = new HashMap(); for (int i=0; i<numbers.length; i++) { if(!map.containsKey(target-numbers[i])) { map.put(numbers[i],i); } else { result[1]=i; result[0]=map.get(target-numbers[i]); return result; } } throw new IllegalArgumentException("two numbers not found"); } public static void main(String[] args) { int[] numbers = new int[] {2,11,5,10,7,8}; int[] result = twoSum(numbers,9); System.out.println("the indices are :"+ result[0]+" and "+result[1]); } }
代码在在线编译器可正常运行,但本地VSCode环境编译失败。
排查与解决方案
1. 检查是否存在自定义System类
本地编译环境中,如果当前代码目录下存在名为System.java的自定义文件,编译器会优先加载这个类而非JDK自带的java.lang.System,导致找不到out成员变量。
- 操作:查看当前
/Users/chenchureddy/PROGRAMMING/Java/目录下的文件,若有System.java则删除或重命名。
2. 验证Java环境配置
确保本地使用的是标准JDK而非自定义或损坏的Java环境:
- 在终端执行以下命令,确认版本信息正常:
javac -version java -version
- 若版本异常,检查
JAVA_HOME环境变量是否指向正确的JDK路径,重新配置后重启终端。
3. 显式指定核心类库编译(可选)
如果classpath配置异常导致无法加载JDK核心类,编译时可显式指定rt.jar路径(适用于JDK 8及以下版本,JDK 9+已模块化无需此操作):
javac -cp $JAVA_HOME/jre/lib/rt.jar TwoSum.java
4. 修正代码中的转义字符(次要)
代码中Map <Integer,Integer>的<是HTML转义字符,实际代码中应替换为<,否则会引发语法错误(虽当前错误并非由此导致,但建议修正以避免潜在问题)。
内容的提问来源于stack exchange,提问作者MEKALATHURU CHENCHAIAH
相关产品推荐
相关产品推荐

