Errore Java: avvio illegale dell’espressione

In pratica sto perfezionando, completando e cercando di compilare un codice di test da un libro di riferimento per i principianti di Java. L’objective è creare un gioco di ipotesi in cui il bersaglio si trovi in ​​3 celle continue (sto tenendo le posizioni in un array) e l’utente indovina il numero di cella. distruggere la cellula bersaglio per cella.

Ho controllato una mezza dozzina di post sullo stesso errore, ma non riuscivo a capire cosa stesse andando storto.

Questo è il mio errore:

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

e il mio codice è:

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

I metodi possono dichiarare solo variabili locali. Questo perché il compilatore segnala un errore quando si tenta di dichiararlo come pubblico.

In caso di variabili locali non è ansible utilizzare alcun tipo di accesso (pubblico, protetto o privato).

Si dovrebbe anche tenere traccia di ciò che significa parola chiave statica. Nel metodo checkYourself , si utilizza la dichiarazione delle locations .

La parola chiave statica distingue gli elementi accessibili con la creazione dell’object. Ecco perché non c’è parte dell’object stesso.

 public class Test { //Capitalized name for classs 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. } } 

Rimuovi la parola chiave public da int[] locations={1,2,3}; . Un modificatore di accesso non è consentito all’interno di un metodo, poiché la sua accessibilità è definita dall’ambito del suo metodo.

Se il tuo objective è utilizzare questo riferimento in molti metodi, potresti voler spostare la dichiarazione al di fuori del metodo.

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

Dichiarare le variabili precedenti sopra il metodo principale e il codice viene compilato correttamente.

 public static void main(String[] args){ 

Dichiara stat public static int[] locations={1,2,3}; al di fuori del metodo principale.