Ошибка Java: недопустимое начало выражения

java compiler-errors

215918 просмотра

4 ответа

120 Репутация автора

Я в основном дорабатываю, дополняю и пытаюсь скомпилировать тестовый код из справочника для начинающих по 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 result;
    }


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

}
Автор: AnujaPL Источник Размещён: 03.07.2014 08:40

Ответы (4)


2 плюса

1252 Репутация автора

Declare

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

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

Автор: user1071777 Размещён: 03.07.2014 08:42

5 плюса

1439 Репутация автора

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

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

Автор: BlackBox Размещён: 03.07.2014 08:43

20 плюса

26512 Репутация автора

Решение

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

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

Вы также должны следить за тем, что означает статическое ключевое слово. В методе 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.
   } 
}
Автор: Damian Leszczyński - Vash Размещён: 03.07.2014 08:45

2 плюса

461 Репутация автора

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

public static test dot=new test();

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

public static void main(String[] args){
Автор: Sam Размещён: 03.07.2014 08:48
Вопросы из категории :
32x32