2

200 個の数字 (1 ~ 200) の配列を受け取り、それらをランダム化し、それらの数字をテキスト ファイルに出力するプログラムを作成しようとしています。

私は一日中苦労してきましたが、なぜ何も機能していないのかわかりません。

主な方法:

public static void main (String[] args) 
{
    int[] numbers= new int [201];

    for (int i=0; i < numbers.length; i++)
    {
        numbers[i]=i;

    }
}//end main method

ランダム化方法:

public static int[] randomizeArray(int[] numbers) 
{
    Random gen= new Random(10);

    for (int i=0; i < numbers.length; i++)
    {
        int n= gen.nextInt(200);
        numbers[i]=n;
    }

    return numbers;

}//end randomizeArray method

そして印刷方法:

public static int[] outputArray(int[] numbers) throws IOException
{

    FileOutputStream output;

    output= new FileOutputStream("RandomOut.txt");

    new PrintStream(output).println(randomizeArray(numbers));

    output.close();

    return numbers;

}//end method outputArray

私は何かを見落としているか、何か間違ったことをしていることを知っています。

4

5 に答える 5

2

mainメソッドの最後でoutputArrayを呼び出すべきではありませんか?

于 2011-11-29T22:05:09.447 に答える
1

あなたの問題の1つは次の行です。

new PrintStream(output).println(randomizeArray(numbers));

これはおそらく次のようなものを印刷します:

[I@10769dd

はい?数値を出力するには、次のようなforループを作成する必要があります。

for (int i=0; i < numbers.length; i++) {
    new PrintStream(output).println(numbers[i]);
}

ただし、ループ内で毎回PrintStreamを作成する必要はありません。

于 2011-11-29T22:05:51.477 に答える
1

Arrays.toString(int[] arr)1)その配列を印刷するために使用する必要があります。

2)配列入力を並べ替える場合は、コードが非常に異なります。それ以外の場合は、入力を削除して新しい配列を使用します。

3)ヘルパーメソッドを呼び出します!

編集:この擬似コードを追加しました:

boolean[] used=new boolean[200];
make old[] and new[]
for(i=0;i<200;i++){
    int n=random number from 0 to 199;
    while(used[n]) n=(n+1)%200;
    new[i]=old[n];
    used[n]=true;
}
return new;
于 2011-11-29T22:07:08.620 に答える
1

メイン メソッドは (200 ではなく) 201 要素の配列を初期化し、この配列に対して何もしません。明らかに、ランダム化はなく、現在は任意のファイルに書き込みます。メイン メソッドはrandomizeArray、次にを呼び出す必要がありoutputArrayます。

要素はメソッドによって再初期化されるため、main の配列要素の初期化は役に立ちませんrandomizeArray。ところで、このメソッドは何も返す必要はありません。

最後に、outputArrayメソッドは配列をループし、各要素を println する必要があります。ストリームは、finally ブロックで閉じる必要があります。それも何も返すべきではありません。

于 2011-11-29T22:08:04.580 に答える
0

抵抗できなかった...

    String filename = "random200.txt";
    List<Integer> numbers = new ArrayList<Integer>();
    for (int i = 1; i < 201; i++)
    {
        numbers.add(i);
    }
    StringBuilder sb = new StringBuilder();
    while (!numbers.isEmpty())
    {
        int position = new SecureRandom().nextInt(numbers.size());
        Integer randomNumber = numbers.remove(position);
        sb.append(randomNumber + "\n");
    }
    try
    {
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename), "UTF8"));
        out.append(sb.toString());
        out.close();
    }
    catch (Exception ex)
    {
        throw new RuntimeException(ex);
    }
于 2011-11-29T22:15:27.193 に答える