Java 将一维阵列转换为二维阵列

Java 将一维阵列转换为二维阵列,java,data-structures,Java,Data Structures,我正在为我的java类做一个赋值,部分赋值需要读入一个20x20的.csv文件,并将每个字符串插入一个数组中 我试图将文件初始读入时的一维数组转换为二维数组,但我的数据输出似乎有问题 我创建了一个add方法,当运行程序并调用该方法时,我只得到一列字符串,并以相反的顺序列出,但是如果我执行System.out.println,我不会得到我想要的输出。我对这个还是相当陌生的,所以我确信我没有看到简单的错误,但对我来说,它看起来是正确的 文件的读入 try { Scanner fileScan

我正在为我的java类做一个赋值,部分赋值需要读入一个20x20的.csv文件,并将每个字符串插入一个数组中

我试图将文件初始读入时的一维数组转换为二维数组,但我的数据输出似乎有问题

我创建了一个add方法,当运行程序并调用该方法时,我只得到一列字符串,并以相反的顺序列出,但是如果我执行System.out.println,我不会得到我想要的输出。我对这个还是相当陌生的,所以我确信我没有看到简单的错误,但对我来说,它看起来是正确的

文件的读入

try {
    Scanner fileScanner = new Scanner(toOpen);    
    while (fileScanner.hasNext()) {
        fromFile = fileScanner.nextLine();
        String temp[] = fromFile.split(" ");
        theList.add(temp[0]);
        System.out.println(fromFile);
        String[][] arr = new String[20][20];
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = temp[i];
                System.out.print(arr);
            }
        }

        System.out.println();
    }

    fileScanner.close();
还有我打印结果的方法

public String makeString() { // A Class that makes a string
    String theString = new String();

    if (isEmpty()) {
        theString = "List is empty";
    } else {
        Node printer = getRoot();

        while (printer != null) {
            theString += printer.getTableValue() + " ";
            printer = printer.getNext();
        }
    }

    return theString;
}

由于我们不知道文件中的行数,我们可以先将每行存储到字符串[]的ArrayList中,然后将其转换为2D数组,例如:

List<String[]> lines = new ArrayList<>();
while (fileScanner.hasNext()) {
    String line = fileScanner.nextLine();
    String temp[] = line.split(" ");
    lines.add(temp);
}
现在,将其转换为数组:

String[][] array = new String[lines.size()][];
for(int i=0 ; i<lines.size() ; i++){
    array[i] = lines.get(i);
}

我想你的问题在这里:

for (int i = 0; i < arr.length; i++) {
  for (int j = 0; j < arr[i].length; j++) {
    arr[i][j] = temp[i];
这将为arr[i]中的所有插槽分配相同的值temp[i]。再一次猜测,我认为你需要这样的东西:

int tmpIndex = 0;
for (int i = 0; i < arr.length; i++) {
  for (int j = 0; j < arr[i].length; j++) {
    arr[i][j] = temp[tmpIndex];
    tmpIndex++;
换句话说:在temp中有400个不同的值。但是您的代码只是一次又一次地将前20个值赋值20次


除此之外:System.out.printarr;没有达到预期的效果-要了解如何正确打印数组,请参阅。

我了解了实际使用add和makeString方法的地方,以及列表变量的作用

另外,请发送您的文件内容

无论如何:

如果这是对add方法的调用:theList.addtemp[0];这意味着您在一个扩展类结构中,而您没有显示它。但无论如何,您都没有使用它来填充for循环中的2d数组

这里的代码也是错误的:在每一行中插入相同的元素temp[i

for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = temp[i];
                System.out.print(arr);
            }
        }

您可以使用动态结构(如ArrayList)来填充元素…

不要迭代列表,只需使用Collection::toArray with String[][]strings=lines.toArraynew String[theList.size][];更新:我把另一句话放进了可能的答案中,猜这将有助于打印数组内容。除此之外:请给出你得到的答案的反馈。丢下内容然后消失在稀薄的空气中是不礼貌的。例如,你可以在某个时候接受最有用的答案。
for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = temp[i];
                System.out.print(arr);
            }
        }