繁体   English   中英

将一维数组转换为二维数组

[英]Turning 1d array into 2d

我正在为我的java类分配作业,该分配作业的一部分要求读取20x20的.csv文件,并将每个字符串插入数组中。

我正在尝试将文件的初始读取的1d数组转换为2d数组,但是我在数据输出中似乎做错了什么。

我做了一个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 void add(String tableValue) { // Adds a new node
    Node newNode = new Node(tableValue);
    if (isEmpty()) {
        setRoot(newNode);
    } else {
        newNode.setNext(getRoot());
        setRoot(newNode);
    }
}

和我的打印结果的方法

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;
}

我想你的问题在这里:

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++;

换句话说:您有400个不同的温度值。 但是您的代码一次又一次地只分配前20个值20次。

除此之外: System.out.print(arr); 并没有按照您的期望去做-要学习如何正确打印数组 ,请参见this

由于我们不知道文件中的行数,因此我们可以从将每一行存储到ArrayList (为String[] )开始,然后将其转换为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);
}

我hevent在哪里见过你真正使用外接makeString方法,什么是可变的thelist的作用。

另外,能否请您发送文件内容。

任何方式:

如果这是您对add方法的调用: theList.add(temp[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之类的动态结构来填充Elements ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM