1

私はJavaに比較的慣れていないので、2つの数値を一定回数ランダムに生成し、2つの数値が同じ回数を追跡するコードを試してみたいと思っていました。次に、X回試行した後、それが発生する可能性を計算します。

乱数を同じ回数で割った数

import java.util.Random;

public class RandomTest {
    public static void main(String[] args) {
        int[] anArray;
    anArray = new int[100000];
    Random randomGenerator = new Random();
    for (int loop = 1; loop < 1000; loop++) {
        int random1 = randomGenerator.nextInt(100);
        int random2 = randomGenerator.nextInt(100);
        if (random1 == random2) {
            int number = number + 1;
            countArray[number] = loop;
        }
        if (loop == 1000) {
            System.out.println("Took " + loop + " randoms.");
            break;
        }
        else {}
        }
    }
}

主な問題は、配列を埋めて、ループの内外に int を取得することのようです。

4

2 に答える 2

4

あなたのコードの私のバージョンは次のとおりです。

import java.util.Random;
import java.util.ArrayList;

public class RandomTest {
    public static void main(String[] args) {
        ArrayList<Integer> duplicates = new ArrayList<Integer>();
        int random1 = 0, random2 = 0;
        Random randomGenerator = new Random();
        for (int loop = 1; loop <= 1000; loop++) {
            random1 = randomGenerator.nextInt(100);
            random2 = randomGenerator.nextInt(100);
            if (random1 == random2) {
                duplicates.add(new Integer(random1));
            }
        }

         for (Integer i : duplicates) {
             System.out.println("Duplicate: "+i.toString());
         }
    }
}

ソリューションには、次のような多くの問題が含まれています。

int number = number + 1;

上記は number と呼ばれる新しい int を作成し、それに値 null + 1 を与えます。これは、上記が 2 行に分割できるためです。

int num;
num = num + 1;

最初の行は、num という変数用のメモリ空間を予約します。2 行目は、(num + 1) の値を num に入れようとします。num を呼び出しており、初期化されていないため、これにより java.lang.Error が返されます (少なくともそれは私が得たものです)。

ご覧のとおり、数値を for ループの外に置き、次のように初期化します。

int number = 0;
for (int loop = 1; loop <= 1000; loop++) {
    number = number + 1;
}

number の値を 1, 999 回増やします。

それは私を次のポイントに導きます。条件が true になる前に条件がループを停止するため、for ループは loop = 1000 にはなりません。したがって、for ループが終了すると、ループは 999 になります。ループを loop = 1000 で終了させたい場合は、 を使用する必要がありますloop <= 1000。また、ループが終了すると、その下の残りのコードを続行するため、if 条件は必要ありません。

number私は自分のソリューションではまったく使用していません。これは、本質的に動的に成長し、他のクールなものを実行できる配列のはるかに高度なバージョンであるArrayListを使用したためです。残念ながら、ArrayLists にはオブジェクトを含める必要があるため、それぞれをオブジェクトint内にラップしIntegerます。これで問題ありません。最後に、for ループを使用して重複リストを反復処理し、結果ごとに出力します。

これがお役に立てば幸いです。質問がある場合は、下にコメントしてください。

于 2013-05-17T13:18:19.397 に答える
0

おそらく、この行について何かしたいと思うでしょう:

    int number = number + 1;

配列をステップスルーするには、数値をゼロに設定します

int number = 0;

ループに入る前に、番号をインクリメントします

number = number + 1;
于 2013-05-17T12:48:02.690 に答える