Ошибка Java: незаконный запуск выражения

Я в основном совершенствую, завершаю и пытаюсь скомпилировать тестовый код из справочника для начинающих Java. objective состоит в том, чтобы создать игру угадывания, в которой цель находится в 3 непрерывных ячейках (я держу ячейки в массиве), и пользователь догадывается о номере ячейки. для уничтожения клетки-мишени клеткой.

Я проверил здесь полдюжины сообщений с той же ошибкой, но я не мог понять, что происходит не так.

Это моя ошибка:

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. } } 

Удалить public ключевое слово из int[] locations={1,2,3}; , Модификатор доступа не допускается внутри метода, поскольку его доступность определяется его областью действия метода.

Если ваша цель – использовать эту ссылку во многих методах, вы можете переместить объявление вне метода.

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

Объявите вышеперечисленные переменные выше основного метода, и компилирует код.

 public static void main(String[] args){ 

Объявлять public static int[] locations={1,2,3}; вне основного метода.

  • Как вызвать функцию-указатель-член?
  • Что означает «Ошибка: Несовместимые типы: void не может быть преобразован в ...» означает?
  • 'Delegate' System.Action 'не принимает 0 аргументов.' Является ли это ошибкой компилятора C # (lambdas + два проекта)?
  • Возвращать определенный тип внутри Haskell
  • Ошибка компилятора: «Инициализатор не является константой времени компиляции»
  • javac: компиляция файла .java, который использует в нем другие classы
  • Ошибка компиляции кода слишком велика в Java
  • Deserialize JSON с jacksonом в полиморфные типы - полный пример дает мне ошибку компиляции
  • c ++ ошибка компиляции: ISO C ++ запрещает сравнение между указателем и целым числом
  • Назначьте переменную внутри блока переменной переменной вне блока
  • Перерыв в модуле classа или разрыв по необработанным ошибкам (ошибка проверки ошибок VB6, настройка параметров в среде IDE)
  • Давайте будем гением компьютера.