将随机数组输出到文件

时间:2011-11-29 22:00:07

标签: java arrays file-io printwriter

我正在尝试编写一个包含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

任何帮助都会很棒,我知道我忽略了某些事情或做错了事。

5 个答案:

答案 0 :(得分:2)

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

答案 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。

答案 2 :(得分: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;

答案 3 :(得分:1)

您的main方法初始化一个包含201个元素(而不是200个)的数组,并且不对此数组执行任何操作。显然,没有随机化,现在写入任何文件。主要方法应调用randomizeArray,然后调用outputArray

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

最后,outputArray方法应循环遍历数组并打印每个元素。流应该在finally块中关闭。它也不应该返回任何东西。

答案 4 :(得分: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);
    }