Java Main方法报未知语法错误的原因排查与解决
错误原因
你代码里有两个核心问题,改数组初始化方式没用是因为没命中根本错误:
- 可执行逻辑位置错误:
for循环属于执行语句,不能直接放在类的根层级(和成员变量i、array1、array2同级的位置)。Java类的根层级只能声明成员变量、方法、构造器、初始化块、嵌套类,所有执行语句必须包裹在方法、构造器或者初始化块内部。编译器在成员声明区域碰到for循环的括号时,会默认认为你在写变量声明,才会抛出「需要分号」的语法错误。 - 数组长度调用错误:Java数组的
length是公开的final属性,不是方法,你写的array1.length()、array2.length()属于错误的方法调用写法,正确写法是去掉括号,直接写array1.length、array2.length。
修复后代码
你可以选择用实例初始化块包裹数组赋值的循环,也可以直接把数组声明、循环逻辑都挪到main方法里,以下是可直接运行的版本:
public class ArraySortingTiming { int i = 10; int[] array1 = new int[i]; int[] array2 = new int[i]; // 实例初始化块,创建对象时自动执行,包裹for循环逻辑 { for (int a = 0; a < array1.length || a < array2.length; a++) { int n = (int)(Integer.MAX_VALUE * Math.random()); array1[a] = n; array2[a] = n; } } public static void main(String[] args) { ArraySortingTiming a = new ArraySortingTiming(); // 后续可在此处添加数组排序、计时的相关逻辑 } }
如果不需要把数组作为类的成员变量,更简洁的写法是把所有逻辑都放到main方法内:
public class ArraySortingTiming { public static void main(String[] args) { int arrayLength = 10; int[] array1 = new int[arrayLength]; int[] array2 = new int[arrayLength]; for (int a = 0; a < array1.length || a < array2.length; a++) { int n = (int)(Integer.MAX_VALUE * Math.random()); array1[a] = n; array2[a] = n; } // 后续排序计时逻辑 } }
内容的提问来源于stack exchange,提问作者Santiago Hernandez
相关产品推荐
相关产品推荐

