【问题标题】:Outputting a randomized array to a file将随机数组输出到文件
【发布时间】:2011-11-29 22:00:06
【问题描述】:

我正在尝试编写一个程序,该程序接受一个包含 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

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

【问题讨论】:

  • 我不知道..它编译得很好,但没有输出。我找不到问题:/
  • 发布您收到的错误消息。或者让我们知道什么不起作用
  • 一件事,int[] numbers = new int[201]; 创建了一个包含 201 个数字的数组。另外,如果这是家庭作业,也应该这样标记。
  • 可能需要打印Arrays.deepToString(numbers)
  • 我知道,那是个意外。抱歉,刚刚标记了它。

标签: java arrays file-io printwriter


【解决方案1】:

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

【讨论】:

  • @Jake223 outputArray 调用 randomizeArray
【解决方案2】:

你的问题之一是这条线:

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

这可能会打印出如下内容:

[I@10769dd

是吗?您需要编写一个 for 循环来输出数字,例如:

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

除了您不想在循环中每次都创建 PrintStream。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      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;
      

      【讨论】:

        【解决方案5】:

        忍不住……

            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);
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          相关资源
          最近更新 更多