AnujaPL AnujaPL - 3 months ago 15
Java Question

Java Error: illegal start of expression

I'm basically refining, completing and trying to compile a test code from a reference book for java beginners. The objective is to create a guessing game wherein the target is located in 3 continuous cells (I'm holding the locations in an array) and the user guesses the cell no. to destroy the target cell by cell.

I checked out half a dozen posts here on the same error, but I couldn't figure out what was going wrong.

This is my error:

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


and my code is:

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

}

Answer

Methods can declare only local variables. That why compiler report an error when you try to declare it as public.

In case of local variables you can not use any kind of accessor (public, protected or private).

You should also keep track on what static key word means. In method checkYourself, you use the declaration of locations.

The static key word distinct the elements that are accessible with object creation. There for there are not part of object itself.

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