En gros, je peaufine, complète et essaie de compiler un code de test à partir d’un livre de référence pour Java débutants. L’objectif est de créer un jeu de devinettes dans lequel la cible est située dans 3 cellules continues (I je tiens les emplacements dans un tableau) et l'utilisateur devine le numéro de cellule pour détruire la cellule cible par cellule.
J'ai vérifié une demi-douzaine de messages ici sur la même erreur, mais je ne pouvais pas comprendre ce qui n'allait pas.
C'est mon erreur
test.Java:5: error: illegal start of expression
public int[] locations={1,2,3};
^
1 error
et mon code est:
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;
}
}
Les méthodes ne peuvent déclarer que des variables locales. C'est pourquoi le compilateur rapporte une erreur lorsque vous essayez de le déclarer comme public.
En cas de variables locales, vous ne pouvez utiliser aucun type d’accesseur (public, protégé ou privé).
Vous devez également garder une trace de la signification de la clé statique dans Word. Dans la méthode checkYourself
, vous utilisez la déclaration de locations
.
La clé statique Word distingue les éléments accessibles avec la création d'objet. Là car il ne fait pas partie de l'objet lui-même.
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.
}
}
Supprimez le mot clé public
de int[] locations={1,2,3};
. Un modificateur d'accès n'est pas autorisé dans une méthode, son accessibilité étant définie par son étendue de méthode.
Si votre objectif est d'utiliser cette référence dans plusieurs méthodes, vous pouvez déplacer la déclaration en dehors de la méthode.
Déclarer
public static int[] locations={1,2,3};
en dehors de la méthode principale.
public static int [] locations={1,2,3};
public static test dot=new test();
Déclarez les variables ci-dessus au-dessus de la méthode principale et le code compile bien.
public static void main(String[] args){