Java错误:非法启动表达式

我基本上正在完善,完成并尝试从Java初学者的参考书中编译测试代码。 目标是创建一个猜谜游戏,其中目标位于3个连续的单元格中(我将这些位置保持在一个数组中),并且用户猜测单元格为no。 通过细胞破坏靶细胞。

我在同一个错误中检查了六个post,但我无法弄清楚出了什么问题。

这是我的错误:

test.java:5: error: illegal start of expression public int[] locations={1,2,3}; ^ 1 error 

我的代码是:

 public class test{ public static void main(String[] args){ test dot=new test(); public int[] locations={1,2,3}; dot.setLocationCells(locations); String userGuess="2"; String result = dot.checkYourself(userGuess); String testResult="failed"; if(result.equals("hit")){ testResult="passed"; } System.out.println(testResult); } public String checkYourself(String stringGuess){ int guess=Integer.parseInt(stringGuess); String result="miss"; int numOfHits=0; for(int cell:locations){ if(guess==cell){ result="hit"; numOfHits++; break; } } if(numOfHits==locations.length){ result="kill"; } System.out.println(result); return result; } public void setLocationCells( int[] locations){ int[] locns; locns=locations; } } 

方法只能声明局部变量。 这就是为什么编译器在您尝试将其声明为公共时报告错误的原因。

如果是局部变量,则不能使用任何类型的访问器(公共,受保护或私有)。

您还应该跟踪静态关键字的含义。 在方法checkYourself ,您使用locations声明。

静态关键字区分对象创建可访问的元素。 因为没有对象本身的一部分。

 public class Test { //Capitalized name for classes are used in Java private final ini[] locations; //key final mean that, is must be assigned before object is constructed and can not be changed later. public Test(int[] locations) { this.locations = locations;//To access to class member, when method argument has the same name use `this` key word. } public boolean ckeckYourSelf(int value) { //This method is accessed only from a object. for(int location : locations) { if(location == value) { return true; //When you use key word return insied of loop you exit from it. In this case you exit also from whole method. } } return false; //Method should be simple and perform one task. So you can ge more flexibility. } public static int[] locations = {1,2,3};//This is static array that is not part of object, but can be used in it. public static void main(String[] args) { //This is declaration of public method that is not part of create object. It can be accessed from every place. Test test = new Test(Test.locations); //We declare variable test, and create new instance (obect) of class Test. String result; if(test.checkYourSelf(2)) {//We moved outsie the string result = "Hurray"; } else { result = "Try agian" } System.out.println(result); //We have only one place where write is done. Easy to change in future. } } 

int[] locations={1,2,3};删除public关键字int[] locations={1,2,3}; 。 方法内不允许访问修饰符,因为其可访问性由其方法范围定义。

如果您的目标是在许多方法中使用此引用,则可能需要将声明移到方法之外。

 public static int [] locations={1,2,3}; public static test dot=new test(); 

在main方法上面声明上面的变量,代码编译得很好。

 public static void main(String[] args){ 

声明public static int[] locations={1,2,3}; 主要方法之外。