基本的に、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;
}
}
メソッドはローカル変数のみを宣言できます。そのため、コンパイラがパブリックとして宣言しようとするとエラーが報告されます。
ローカル変数の場合、どの種類のアクセサー(パブリック、保護、またはプライベート)も使用できません。
また、Wordが意味する静的キーを追跡する必要があります。メソッドcheckYourself
では、locations
の宣言を使用します。
静的キーWordは、オブジェクト作成でアクセス可能な要素を区別します。そこにはオブジェクト自体の一部はありません。
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.
}
}
int[] locations={1,2,3};
からpublic
キーワードを削除します。アクセス修飾子はメソッドスコープによって定義されるため、アクセス修飾子はメソッド内では許可されません。
多くのメソッドでこの参照を使用することが目的の場合、宣言をメソッドの外側に移動することができます。
宣言する
public static int[] locations={1,2,3};
mainメソッドの外側。
public static int [] locations={1,2,3};
public static test dot=new test();
Mainメソッドの上で上記の変数を宣言すると、コードは正常にコンパイルされます。
public static void main(String[] args){