2

I'm trying to write a program that takes an array of 200 numbers (1-200), randomizes them, and then outputs those numbers to a text file.

I've been struggling for the whole day and I can't figure out why nothing is working.

Main method:

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

Randomize 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

And the print 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

Any help would be great, I know I'm overlooking something or doing something incorrectly.

4

5 回答 5

2

您不应该在 main 方法的末尾调用 outputArray 吗?

于 2011-11-29T22:05:09.447 回答
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

1)您需要用于Arrays.toString(int[] arr)打印该数组。

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

您的 main 方法初始化了一个包含 201 个元素(而不是 200 个)的数组,并且对该数组不做任何事情。很明显,没有随机化,现在写入任何文件。main 方法应该调用randomizeArraythen outputArray

main 中数组元素的初始化是没有用的,因为元素会被randomizeArray方法重新初始化。顺便说一下,这个方法不需要返回任何东西。

最后,该outputArray方法应该循环遍历数组并打印每个元素。流应该在 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 回答