-1

ランダム ジェネレーターのインスタンスがオブジェクトとして認識されず、別の .class ファイル内で使用できません。ランダム整数ジェネレーターの基本コードは次のとおりです。

package RandomInstanceGenerator;
import java.util.Random;

/** Generate 10 random integers in the range 0..99. */
public final class RandomInteger {

  public static final void main(String... aArgs){
    log("Generating 10 random integers in range 0..99.");

    //note a single Random object is reused here
    Random randomGenerator = new Random();
    for (int idx = 1; idx <= 10; ++idx){
      int randomInt = randomGenerator.nextInt(100);
      log("Generated : " + randomInt);
    }

    log("Done.");
  }

  private static void log(String aMessage){
    System.out.println(aMessage);
  }
}

以下のコードを新しいインスタンスとして実行しようとしています。私は他の学習から明らかないくつかの方法を試しましたが、それらは私を失敗させたので、理解の助けとして他の人の知識を求めます. 私は、ベースコードを別のソースから文字通りコピーして貼り付けたことを理解して、それを独自の小さな.classとして実行していると言います。新しいインスタンスを作成しようとするコードは次のとおりです。

package RandomInstanceGenerator;
import java.util.Random;
class Inst {
  public static void main (String args[]) {
    RandomInteger rig=new RandomInteger();
    rig.main(args);
  }
}

どちらも編集が必要だと確信しています。これを修正して、うまくいくことを願っています。

試行された変更のリスト:

1) RandomInteger.class のインポートを試みました。返されたエラーは、シンボル「Random Integer」が見つからないことを示しています。

コードを使用しましたimport RandomInstanceGenerator.RandomInteger;

2) 後で次の試みに取り組んでいます..

4

1 に答える 1

0

Java がプログラムを実行するとき、main関数を探します。この場合は、2 番目のクラスで。次に、そのクラスが最初のクラスを ( 経由でnew RandomInteger()) インスタンス化します。次に、その最初のクラスのメイン メソッドを呼び出そうとします。

ただし、このメソッドには というラベルが付いていることに注意してくださいstatic。静的メソッドは、特定のインスタンス化されたオブジェクトではなく、クラスでのみ実行できます。RandomInteger.main() を使用すると、別の結果が期待できます。

class Inst {
  public static void main (String args[]) {
    RandomInteger.main(args);
  }
}

ただし、これは RandomInteger を独自のプログラムとして実行することと同等であることに注意してください。あなたが言うように、プログラムをオブジェクトのメソッドとして実行したい場合、これがあなたが望むものです:

public final class RandomInteger {
  private Random randomGenerator = new Random(); //A single object can reuse this component

  //function prints out x random numbers between low and high
  //Note that your function should do ONE thing, therefore do not make it also interpret
  //your program arguments!
  public void logXRandomNumbers(int x, int low, int high){ 
    log("Generating " + x + " random integers in range " + low ".." + high);

    int range = high - low;
    //you really should do a sanity check here to ensure the range is valid.

    //note a single Random object is reused here
    for (int idx = 1; idx <= x; ++idx){
      int nextResult = this.randomGenerator.nextInt(range) + low;
      log("Generated : " + nextResult);
    }

    log("Done.");
  }

  //This function is probably overkill
  private static void log(String aMessage){
    System.out.println(aMessage);
  }
}

あとは、メイン関数からこれを呼び出すだけです。

public static void main (String args[]) {
  RandomInteger generator = new RandomInteger();
  generator.logXRandomNumbers(10, 0, 100);
}

インポートに関しては、両方のクラスに同じパッケージが必要です。Generator簡単にするために、次のように言いましょう。

package Generator;

2 番目のクラス (あまりよくない名前の Inst) だけが、ジェネレーター/ロギング クラスをインポートする必要があります。

import Generator.*;

また

import Generator.RandomInteger;

これらのファイルが両方とも「Generator」という名前の同じディレクトリにあり、そのjavac上のディレクトリから実行していることを確認してください。

于 2013-04-10T02:24:10.777 に答える