2017-08-04 138 views
-1

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

我add方法

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

更新:我把另一个句子翻译成可以回答,猜测将与*印刷*阵列的内容帮助。除此之外:请提供关于您得到的答案的反馈。放下内容然后在空气中消失并不完全是礼貌。例如,您可以*接受*某些时候的“最有帮助”的答案。 – GhostCat

回答

1

由于我们不知道的数量在一个文件中,我们可以将每行存入ArrayListString[])和然后将其转换成一个二维数组,如:

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); 
} 
+0

不要遍历列表,只需使用'Collection :: toArray'与'String [] [] strings = lines.toArray(new String [theList.size()] []);' – Flown

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

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

除此之外:System.out.print(arr);没有达到您期望的效果 - 要了解如何正确打印阵列,请参阅this

0

我hevent在哪里见过你真的使用您的添加makeString方法,什么是的thelist变量的作用。

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

任何方式:

如果这是你的电话到添加方法:theList.add(temp[0]);这意味着你是,你还没有表现出它的扩展类结构内。但是,任何方式,您没有使用它填补了二维数组的for循环

这里的代码也错误:您插入相同的元素临时[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填补元素...