将1d数组转换为2d

时间:2017-08-04 07:40:53

标签: java data-structures

我正在为我的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;
}

3 个答案:

答案 0 :(得分:2)

我想你的问题就在这里:

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

这将相同的值(temp [i])分配给arr [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.print(arr);没有按照您的预期行事 - 要了解如何正确打印数组,请参阅this

答案 1 :(得分:1)

由于我们不知道文件中的行数,我们可以先将每行存储到ArrayListString[])中,然后将其转换为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);
}

答案 2 :(得分:0)

我看到你真正使用添加 makeString 方法的地方,以及 theList 变量的作用。

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

任何方式:

如果这是您对添加方法的调用:theList.add(temp[0]);这意味着您位于 扩展类结构 中你还没有表现出来。但 没有使用 以任何方式填充 for循环中的二维数组

这里的代码也是错误的:你在每一行插入相同的元素 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 这样的动态结构来填充元素...