我正在使用数组读/写文件。这是一个大学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.");
}
}
}
}
答案 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]);
}