将数字写入带有数组的文件,然后按照

时间:2016-02-10 02:10:02

标签: java arrays sorting

我正在使用数组读/写文件。这是一个大学Java 2任务,我觉得我应该知道这一点,但我画了一个空白。

我需要做的是按升序对文件中的数字进行排序。

首先,程序检查某个文件是否在src文件中退出:

        File file = new File("src/chapter12/randomfile.dat"); //File path

    if(file.exists())
    {   //If the file exists, print out each element on the file.
        Scanner input = new Scanner(file);
        while(input.hasNextLine())
        {               
            System.out.println(input.nextLine());
        }
            input.close();
    }

^^这部分非常适合搜索文件,如果发现它打印出它所包含的行。

然后,如果找不到该文件,我们创建它并在此处写入100个随机数,从0到100:

else
    {   //If the file isn't found, create it and write 100 random numbers to it.
        try(PrintWriter output = new PrintWriter(file))
        {
            for(int i = 0; i < size; i++)
            {
                randomArray[i] += random.nextInt(101);
                output.print(randomArray[i] + " ");
            }
        }

我尝试在两个地方输入Array.sort(randomArray):

                randomArray[i] += random.nextInt(101);
                output.print(randomArray[i] + " ");
                Arrays.sort(randomArray);

在这里

Scanner input = new Scanner(file);
        Arrays.sort(randomArray);
        while(input.hasNextLine())
        {               
            System.out.println(input.nextLine());
        }
            input.close();

第一个位置在循环中,它将在每次迭代结束之前对其进行排序。 第二个是在我检查文件之前,因为程序第一次运行时,文件不存在所以数组是空的。但是,由于文件是在第一次运行之后创建的,因此逻辑上它会在读取文件之前对已经完整的数组进行排序,但它没有任何意义,因为它会对数组进行排序,但由于文件已创建,因此无法对其进行排序文件。

目前我正在尝试搜索一种方法,可能在打印出读取的内容之前对文件进行排序,但是我的任务指出&#34;您可以使用数组类对文件进行排序。&#34;这是我画空白的地方,有什么建议吗?

如果需要,以下是完整的代码片段:

package chapter12;

import java.io.*;           //Allows us to use File Writer.
import java.util.Arrays;    //Allows us to sort the array.
import java.util.Random;    //Allows us to get random numbers.
import java.util.Scanner;   //Allows us to read the file.
public class Excercise1215 
{
    public static void main(String[] args) throws FileNotFoundException 
    {
        int size = 100;
        int[] randomArray = new int[size];
        Random random = new Random();

    File file = new File("src/chapter12/randomfile.dat"); //File path

    if(file.exists())
    {   //If the file exists, print out each element on the file.
        Scanner input = new Scanner(file);
        Arrays.sort(randomArray);
        while(input.hasNextLine())
        {               
            System.out.println(input.nextLine());
        }
            input.close();
    }
    else
    {   //If the file isn't found, create it and write 100 random numbers to it.
        try(PrintWriter output = new PrintWriter(file))
        {
            for(int i = 0; i < size; i++)
            {
                randomArray[i] += random.nextInt(101);
                output.print(randomArray[i] + " ");
                Arrays.sort(randomArray);
            }
        }           
        //Exception handling
        catch(FileNotFoundException ex)
        {
            System.out.println("File was not found.");  
        }
        catch(Exception ex)
        {
            System.out.println("Something went wrong.");
        }
    }
}

}

2 个答案:

答案 0 :(得分:0)

在写入文件之前,如果它不存在,则应在编写之前对其进行排序。这样做使用两个for循环:

for(int i = 0; i < size; i++) {
    randomArray[i] += random.nextInt(101); //Populate the array
}
Arrays.sort(randomArray); // Sort the array
for(int i = 0; i < size; i++) {
    output.print(randomArray[i] + " "); // Write the array to the file
}

如果文件存在,您应该将值读入数组,对数组进行排序,然后打印数组。这是一个示例:

if(file.exists())
{   //If the file exists, print out each element on the file.
    Scanner input = new Scanner(file);
    int count = 0;
    while(input.hasNextInt())
    {
        randomArray[count++] = input.nextInt();
    }
    input.close();
    Arrays.sort(randomArray);

    for(int i = 0; i < size; i++) {
        System.out.println(randomArray[i]);
    }
}

答案 1 :(得分:0)

在读取未分类的文件

时,您的代码应该是这样的
 Scanner input = new Scanner(file);
 i = 0;
 while(input.hasNextInt())
{               
     // add to randomArray
     randomArray[i++] = input.nextInt();
}

Arrays.sort(randomArray);

// now iterate your sorted array and print out 
for (i = 0; i < randomArray.length; i++) {
   System.out.println(randomArray[i]);       
}