Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java从多个文件读取整数数组_Java_Arrays_Sorting_Bufferedreader_Filereader - Fatal编程技术网

Java从多个文件读取整数数组

Java从多个文件读取整数数组,java,arrays,sorting,bufferedreader,filereader,Java,Arrays,Sorting,Bufferedreader,Filereader,我对Java还比较陌生,所以我必须经常查看如何做事情。我正在从事一个项目,该项目涉及分析许多熟悉的排序,如堆排序、合并排序等。我编写了一些代码,以生成各种不同的数组,每个数组都位于各自的.txt文件中。以下是代码的一部分: import java.io.*; import java.util.Arrays; import java.util.Collections; public class ArrayBuilder { public static void main(String[] ar

我对Java还比较陌生,所以我必须经常查看如何做事情。我正在从事一个项目,该项目涉及分析许多熟悉的排序,如堆排序、合并排序等。我编写了一些代码,以生成各种不同的数组,每个数组都位于各自的.txt文件中。以下是代码的一部分:

import java.io.*;
import java.util.Arrays;
import java.util.Collections;

public class ArrayBuilder {

public static void main(String[] args) throws IOException { 
    for(int i = 2; i < 7; i++) {
        int aLength = (int)Math.pow(10, i);
        buildAscendingArray(aLength);
        buildDescendingArray(aLength);
        buildRandomArray(aLength);
    }
}
public static void buildAscendingArray(int arrayLength) throws IOException {
    File file = new File("arrays_" + arrayLength + "A.txt");
    PrintWriter printWriter = new PrintWriter(file);
    int[] array = new int[arrayLength];
    for(int i = 0; i < array.length; i++) {
        array[i] = i + 1;
    }
    printWriter.println(Arrays.toString(array));
    printWriter.close();
}
import java.io.*;
导入java.util.array;
导入java.util.Collections;
公共类ArrayBuilder{
公共静态void main(字符串[]args)引发IOException{
对于(int i=2;i<7;i++){
intalength=(int)Math.pow(10,i);
建筑上升阵列(长度);
建筑下降阵列(长度);
构建随机阵列(aLength);
}
}
公共静态void buildAscendingArray(int-arrayLength)引发IOException{
File File=新文件(“arrays_u”+arrayLength+“A.txt”);
PrintWriter PrintWriter=新的PrintWriter(文件);
int[]数组=新的int[arrayLength];
for(int i=0;i
我没有包括随机法和降序法,因为它们或多或少是一样的,所以我试图节省空间。所以

我已经对所有的排序进行了编码,我只是想弄清楚如何读取整数数组,这样我就可以在不同的排序中运行它们。我还试图在System.nanoTime()中添加因子为运行每个排序所需的时间计时,以便在给定各种输入的情况下对它们进行比较。不确定是否需要将其添加到每个排序的方法中,或者是否可以在调用(即System.nanoTime(heapsort(array)))中实现

最后,我希望得到一些帮助,将.txt文件放入一个可用的数组中,以便在每个排序中传递它。我首先将所有文件输出到文本文件,以确保在每个排序中运行完全相同的数组


我对Scanner有点熟悉,但也读过FileRead和/或BufferedReader以及其他一些可能的方法。我只是没有足够的经验知道在这种情况下什么最有效以及实现它的最佳方式。如果您只需要将阵列保存到文件存储并构建它们,我将非常感谢您的帮助。

后面可以使用序列化

这门课只是让你了解它的工作原理

public class ArrayReaderWriter {

    public static void main(String[] args) throws Exception {
        writeArray(20);
        readArray(20);
    }

    public static void writeArray(int arrayLength) throws IOException {
        File file = new File("arrays_" + arrayLength + "A.ser");
        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(file));
        int[] array = new int[arrayLength];
        for (int i = 0; i < array.length; i++) {
            array[i] = i + 1;
        }
        os.writeObject(array);
    }

    public static void readArray(int arrayLength) throws IOException, ClassNotFoundException {
        File file = new File("arrays_" + arrayLength + "A.ser");
        ObjectInputStream is = new ObjectInputStream(new FileInputStream(file));
        int[] array = (int[]) is.readObject();
        // Printing here to verify 
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }

}
输出

Scanner scanner = new Scanner("[1, 2, 3]");
scanner.useDelimiter("(\\s)*[\\[,\\]](\\s)*");
while(scanner.hasNextInt()) {
    System.out.println(scanner.nextInt());
}
1
2
3

为此,请使用一些已删除的文件格式,并使用扫描仪读取。 假设我们的delimeter是character is

File file = new File("arrays_" + arrayLength + "A.txt");
PrintWriter printWriter = new PrintWriter(new BufferedWriter(new FileWriter(file)));
printWriter.print(1);
for(int i = 1; i < array.length; i++) {
   printWriter.print(';'); // delimeter
   printWriter.print(i+1);
}
printWriter.close();
应该很好用。你也可以用一条新线作为测力仪


编辑:如果不需要以人类可读的形式存储数组,可以像@Shire Resident在回答中解释的那样使用序列化。

为什么要保存升序数组和降序数组?这种逻辑不是每次都会生成相同的数组吗?你真的需要文本文件还是只需要文件存储?如果只需要文件存储您可以将数组按原样写入文件,并使用ObjectOutputStream和ObjectInputStream直接读取它。我已经有了文本文件,这是否是最有效的处理方式无关紧要。我只是在寻求如何继续的帮助,而不是如何重新开始。在我看来,这对将程序的不同方面作为一个整体进行分离的erms。我目前的做法是将每个文本文件格式化[1,2,3,…,n]。是否可以使用逗号作为分隔符,因为它已经存在,或者我误解了它的使用方式?@您可以使用逗号,但这些括号和空格会导致问题-使用scanner。使用分隔符(“(\\s)*[\\[,\\]](\\s)*”);这应该只留下数字。我喜欢这个想法,但我不确定我的情况下需要多少重新排列。目前我已经生成了所示的.txt文件。排序算法在Eclipse的不同项目下处于不同的类中。如果我这样做,我唯一知道如何实现它的方法是将hat将代码与我的所有类型的类放在同一个类中,因此所有操作都是一次性完成的。不确定这是否会在调试方面造成问题,因为它可能会运行数小时,如果它编译,我将在编译之后才意识到错误。实际上,根据您的建议更改代码并使用readArray方法并不太困难到我的sortAnalysis课程,现在我只是从那里开始工作。我想最终这会让它变得更容易。谢谢你的帮助!
ArrayList<Integer> arr=new ArrayList<>();
Scanner scan=new Scanener(new File("yourfile));
scan.useDelimeter(';');
while(scan.hasNextInt()){
    arr.add(scan.nextInt());
}