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

#java #compiler-errors

#java #ошибки компилятора

Вопрос:

Я в основном уточняю, завершаю и пытаюсь скомпилировать тестовый код из справочника для начинающих Java. Цель состоит в том, чтобы создать игру в угадайку, в которой цель расположена в 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 resu<
    }


public void setLocationCells( int[] locations){
        int[] locns;
        locns=locations;
        }

}
  

Комментарии:

1. иногда возникает проблема с аннотацией, например, @Import{xxx,ххх,} перед закрывающей скобкой стоит лишнее

Ответ №1:

Методы могут объявлять только локальные переменные. Вот почему компилятор сообщает об ошибке при попытке объявить его общедоступным.

В случае локальных переменных вы не можете использовать какой-либо способ доступа (общедоступный, защищенный или частный).

Вы также должны знать, что означает ключевое слово static. В методе checkYourself используется массив целых чисел locations .

Ключевое слово static выделяет элементы, которые доступны при создании объекта. Следовательно, они не являются частью самого объекта.

 public class Test { //Capitalized name for classes are used in Java
   private final init[] 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 checkYourSelf(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 get 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 (object) of class Test.  
      String resu<
      if(test.checkYourSelf(2)) {//We moved outside the string
        result = "Hurray";        
      } else {
        result = "Try again"
      }
      System.out.println(result); //We have only one place where write is done. Easy to change in future.
   } 
}
  

Комментарии:

1. Мой компилятор не выдает ошибку (я просто объявил общедоступные статические расположения int [] за пределами main). Вы уверены, что методы могут объявлять только локальные переменные?

2. ДА. Когда вы перемещаете объявление за пределы main, оно больше не находится в области метода, а в области класса. И тогда вы можете объявить его общедоступным.

3. @AnujaPL, я переписал разработанный вами класс с некоторыми пояснениями, которые могут оказаться полезными в будущем.

Ответ №2:

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

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

Ответ №3:

 public static int [] locations={1,2,3};

public static test dot=new test();
  

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

 public static void main(String[] args){
  

Ответ №4:

Объявить

 public static int[] locations={1,2,3};
  

вне основного метода.

Комментарии:

1. это сработало. Можете ли вы сказать мне, почему мне нужно это сделать? Разве само ключевое слово public не гарантирует, что все мои классы и методы внутри и снаружи main смогут получить к нему доступ?

2. Вы не можете использовать public внутри метода. Если вы хотите, чтобы другие методы / классы имели доступ locations , он должен быть объявлен как общедоступный в вашем классе.

3. Вы не должны использовать общедоступное статическое распределение для концепций потока данных. Это решает проблему, но отчасти создает проблему дизайна.