如何从一个文本文件中读取整数,从最小到最大排序,然后将它们写入另一个文本文件

时间:2019-04-10 22:50:15

标签: java

我试图将100个随机整数写入一个文本文件,从最小到最大对它们进行排序,然后将排序后的那些数字写入单独的文本文件。我了解如何将数字写入一个文件,以及如何对它们进行排序。如果两个文件都不存在,则必须由程序创建它们。例如,如果我写原始100个随机整数所在的“ Numbers.txt”不存在,则程序将为我创建文件,就像我尝试在上面写有排序数字的文本文件一样。我正在努力了解如何将排序后的数字从一个文件写入另一个文件。

我试图从最初存储数字的整数数组中提取相同的数字,并使用Arrays.sort命令对其进行排序,然后将该信息写入到我希望称为“已排序”的单独文件中。文本文件”。我在那里遇到一个不兼容的类型错误,指出无法将void转换为int,但不知道如何在逻辑上解决此错误。

import java.util.*;
import java.io.*;

public class Numbers {
   public static void main(String[] args) throws Exception {
      //check if source file exists
      File number = new File("Numbers.txt");
      File sorted = new File("Sorted.txt");
      if (!number.exists()) {
         try ( // create the file
         PrintWriter output = new PrintWriter(number);
         ) {
            for (int i = 0; i <= 100; i++) {
               output.print(((int)(Math.random() * 999) + 1) + " ");
            }
         }
      }
      try (
      Scanner input = new Scanner(number);
      ) {
         int[] numbers = new int[100];
         for (int i = 0; i < 100; i++)
            System.out.print(numbers[i] + " ");

            System.out.println();

            if (!sorted.exists()) {
               try (
               PrintWriter output = new PrintWriter(sorted)
               ) {
                  for (int i = 0; i < 100; i ++) {
                     output.print((int)Arrays.sort(numbers));
                  }
            }
         }
      }
   }
}

预期结果是第一个文本文件显示的数字与随机创建时的数字相同,而第二个文本文件显示的数字则在对其进行排序后显示。到目前为止,我可以获取第一个文件以随机顺序显示数字,但是甚至无法创建第二个文本文件,更不用说对数字进行排序和书写了。

2 个答案:

答案 0 :(得分:0)

Arrays.sort返回void(see doc)。

您可以做的是对数组进行排序。 <PackageReference Include="MyConsole" Version="2.1.19-alpha"> <PrivateAssets>all</PrivateAssets> </PackageReference>

然后将结果写入文件。

Arrays.sort(numbers);

完整示例:

for (int i = 0; i < 100; i ++) {
    output.print(numbers[i] + " ");
}

答案 1 :(得分:0)

我建议将写入文件的代码提取到方法中。由于它只需要路径和内容,因此可以在两个文件中重复使用,这将使您的生活更轻松。

如果您将行号包含在错误发生的位置,这也非常有帮助,因为它并不总是清楚抛出异常的位置。

据我从您的问题中了解到,问题在于生成一些数字,将其写入文件,最后对它们进行排序,然后将其写入另一个文件。我使用相同的方法编写了一些代码,但进行了一些重组。希望对您有所帮助。

public static void main(String[] args) {
    int[] randomData = new Random().ints(100).toArray();//just a short way to generate numbers. Use your own.

    File numbers = writteArray("Numbers.txt", randomData);
    Arrays.sort(randomData);
    File sorted = writteArray("Sorted.txt", randomData);
}

public static File writteArray(String Path, int[] randomNumbers){
    File numbers = new File(Path);
    //if the file does not exist it will be created automatically
    try(PrintWriter fileWritter = new PrintWriter(numbers)) {
        //just an example of how to write them. Use your prefered format
        //also you can use the append function to not lose the previous content
        for (int e : randomNumbers)
            fileWritter.printf(" %d", e);
        fileWritter.println();
    }
    catch (FileNotFoundException e){
        e.printStackTrace(); 
    }
    return numbers;
}

作为编辑,如果以后不需要文件,可以使writeArray()函数返回void。