-1

乱数ジェネレーターが数値を生成し、選択した数値に応じて、事前定義された配列のメンバーの 1 つが出力されるプログラムを開発しようとしました (配列内でメソッドを呼び出す必要があります)。インデックス番号)

import java.util.Random;
import java.util.Scanner;


public class Testing{
public static void main(String args[]){
public static int calculatew () {
    Random generator = new Random();  
    int number1 = generator.nextInt(3);
}
String array1 [] = new String[4];
array1[1]="Tom";
array1[2]="Jerry";
array1[3]="Mike";
array1[0]="Dustin";
System.out.println("the very first name is "+array1[calculatew]+" The second name is "+array1[calculatew]+" the third accodental name is "+array1[calculatew]+" and the final random name is "+array1[calculatew]+".");

}
}

プログラムをコンパイルすると、次のエラーが返されます。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Syntax error on token(s), misplaced construct(s)
Syntax error on token "int", @ expected
calculatew cannot be resolved to a variable
calculatew cannot be resolved to a variable
calculatew cannot be resolved to a variable
calculatew cannot be resolved to a variable

at Testing.main(Testing.java:7)

このプログラムの主な問題を教えてください。

事前にご回答いただきありがとうございます

4

6 に答える 6

2

1 つの問題は次のとおりです。

public static void main(String args[]){
public static int calculatew () {
    Random generator = new Random();  
    int number1 = generator.nextInt(3);
}

メソッドをメイン外に移動

public static void main(String args[]){
 int calcResults = calculatew ();
....
}
public static int calculatew () {
    Random generator = new Random();  
    int number1 = generator.nextInt(3);
    return number1;
}
于 2012-12-09T18:01:45.937 に答える
1

メソッドの呼び出し方法に関する既に投稿された回答に加えて、calculatew は呼び出されるたびに新しい Random インスタンスを作成します。Random は時間外に初期化されるため、同じ結果がいくつか得られる場合があります。

クラスがロードされたときに一度初期化される、クラス内のジェネレーターを静的フィールドにすることをお勧めします。次に、一連の nextInt 呼び出しは、そのアルゴリズムによって生成された一連の数値を実際に取得します。

于 2012-12-09T18:32:54.123 に答える
0

コンパイラは、calculatew が変数ではないことを伝えているだけです。メソッドとして (そのまま) 使用したい場合は、calcualatew() と入力する必要があります。括弧は、型付けされたものが呼び出されなければならないメソッドであることをコンパイラーに伝えます。括弧を削除すると、コンパイラはそれを変数と見なし、変数スタック内でもオブジェクトハンドルとしても見つけることができないため、見つからないことが通知されます

- 編集

Eclipseのような IDE を使用してみてください。コンパイルを要求する前に、構文的に何か問題がある場合に通知し、その行を直接指し示し、問題の解決方法に関する提案を提供します。Eclipse の使用に関するヘルプが必要な場合は、コメントでお知らせください。

于 2012-12-09T18:22:36.103 に答える
0

メソッド内でメソッドを定義することはできません。main() メソッドの外で calculatew() メソッドを定義する必要があります。コードは次のようにする必要があります。

import java.util.Random;
import java.util.Scanner;


public class Testing {
  public static void main(String args[]){
    String array1 [] = new String[4];
    array1[1]="Tom";
    array1[2]="Jerry";
    array1[3]="Mike";
    array1[0]="Dustin";
    System.out.println("the very first name is "+array1[calculatew()]+" The second name is "+array1[calculatew()]+" the third accodental name is "+array1[calculatew()]+" and the final random name is "+array1[calculatew()]+".");
  }

  public static int calculatew () {
    Random generator = new Random();  
    int number1 = generator.nextInt(3);
  }
}
于 2012-12-09T18:02:52.300 に答える
0

calculatew メソッド定義をメイン メソッド定義内に配置します。Java ではこれを行うことはできません。それらを並べて置くと、大丈夫です。

于 2012-12-09T18:02:53.037 に答える
0

ツアーの問題は、まさにコンパイラが伝えていることです。括弧内を「calculatew()」に変更し、メソッド定義をメイン メソッドの外に移動します。

于 2012-12-09T18:05:07.430 に答える