-2

私はこのプロジェクトで何週間も試みてきました.1から250までの500個の乱数を生成する1つのクラスを作成しなければなりません.2番目のクラスでは最初のクラスのプロパティを継承し、それらすべての数値をテキストファイルに書き込む必要があります.プロパティの取得と操作に問題があり、オンラインで行う方法が見つかりませんでした。

私のファーストクラスは

import java.util.Random;

public class GenKeys {

public static void random(){
for (int i = 0; i < 250; i++) {

int x = (int) (Math.random() * 100);
}
}
}

そして私の2番目のコードは

import java.util.Random;
import java.io.*;
import java.lang.*;
public class MainProg extends GenKeys{

public static void main(String[] args){

    public static void random(){
    try {



BufferedWriter out = new BufferedWriter(new FileWriter("file.txt"));

out.write( x + System.getProperty("line.separator"));// when i compile the x is not     found!!!

out.close();
} catch (IOException e) {
System.out.print(e);
            }
        }

2 つのクラスを連携させるにはどうすればよいですか?

4

6 に答える 6

4
What am i doing Wrong ?
  • GenKeysinのインスタンスを使用するだけでなく、継承を使用していますMainProg
  • x配列などを使用する必要がある場合は、単一の変数のみを使用するため、ランダム値を上書きし続けます
  • 範囲 [1..250] の 500 個の値ではなく、範囲 [0..99] の 250 個の値を作成します。
  • random()メソッドから何かを保存したり返したりしません
于 2013-05-12T14:04:03.940 に答える
0

そして、私はそれをオンラインで行う方法を見つけていません。

私はあなたが十分に一生懸命見たかどうか確信が持てません。

コードを機能させる方法

まず、メソッドの型と名前をint.

public static int randomNum()

次に、コードからループを削除し、生成された乱数を返します。

return (int)Math.Random() * 100; //By the way there is a Random class.

メソッドではrandom、ループが必要です。

for(int x = 0; x < 250; x++)
{
    BufferedWriter out = new BufferedWriter(new FileWriter("file.txt"));
    out.write( randomNum() + System.getProperty("line.separator"));
}

out.close();

コードに関するさまざまな問題

ここで継承を誤用しています。あなたのクラスは の型ではありませんGenKey。単純に使用するため、クラスのフィールドにする必要があります。

次に、メソッドは 1 つの値または 1 つのオブジェクトしか返すことができません。250個の数字をそのまま返すことはできません。に 250 個の番号を割り当てていますx。これは、生成された最後の数値のみを保存します。

于 2013-05-12T14:05:33.747 に答える
0

これは正しいアプローチではないと思います。GenKeys から継承するには、KeyWriter などの別のクラスが必要です。GenKeysメソッドをランダムに使用させます(静的である必要はありません)また、ランダムメソッドが間違っています.500ではなく250のキーしか生成せず、それらは0から250ではありません.
私の解決策は次のとおりです:
1)KeyWriterを継承するGenKeys から
2) nextInt を使用して生成された数値を 1 つだけ返すように random を変更し
ます 3) KeyWriter 内でサイクルを使用して random を 500 回呼び出し、それらの値をファイルに書き込みます
4) main メソッド内で KeyWriter クラスを使用します

実際の解決策は投稿しません。宿題をしているように見えるからです。

于 2013-05-12T14:06:06.097 に答える
0

コウモリについて私が目にするいくつかの問題(およびコメント):

  1. xインスタンスフィールドではなく、どこにも保存されていないため、子クラスからどのようにアクセスできますか。

  2. 他の人が言ったようxに、 for ループの繰り返しごとに上書きされています。

  3. mainProg.random()メソッドがメソッド内で宣言されているのはなぜmainProg.main()ですか?

  4. このプロジェクトで絶対に必要でない限り、継承が進むべき道だとは思いません。mainProg クラスのメイン メソッド内でランダム クラスのインスタンスを作成しないのはなぜですか?

  5. 継承を使用したい場合super.random()は、メソッド内で への呼び出しが必要になると思いmainProg.random()ます (誰かがこれを確認してください。100% 確実ではありません)。

私だったら、GenKeys.random() メソッドで次のようにします。

public int[] random() {
   int[] keys = new int[500];
   for(int i = 0; i < 500; ++i)
   {
      keys[i] = (int) (Math.random() * 100);
   }

   return keys;
}
  1. このコードは、500 個のキーの配列を作成して返します。1 ~ 250 の範囲ではありません。それについては、こちらを参照してください: Javaで特定の範囲内でランダムな整数を生成するにはどうすればよいですか?

うまくいけば、それがあなたを正しい軌道に乗せるでしょう。

于 2013-05-12T14:34:18.360 に答える
0

ここで何かが正しくありませんが、何よりも奇妙なのは、random() 関数を void にしたことです。

 void random()

Xはどこへ行く?新しいintを作成するだけですが、それについては何もしません。

これに加えて、他の人々が言及したように、他の問題があります。Java の関数、特に int と void の違いについて読むことをお勧めします。

于 2013-05-12T14:16:10.663 に答える