簡體   English   中英

使用嵌套的for循環將1d數組轉換為2d數組

[英]Convert 1d array into 2d array using nested for loops

我試圖掃描文件並為每行創建一個1D數組,然后在創建該數組后立即將其復制到2D數組的第一行中。 我已經將代碼僅用於文件的第一行。 它不會移動到下一行。 它遍歷整個2d數組時復制同一條線。 我知道發生這種情況是因為掃描下一行的計數器在到達2d數組的末尾之前不會增加。 如何增加計數器以掃描下一行? 這是我的代碼:(tempString是此循環之前已經創建的一維數組)

    for(int i = 0; i < 7; i++){
        tempString = scnr.nextLine().split(" ");
        //add lines to 2d array
        for(int r = 0; r < 7; r++){
            int x = 0; //moves along each element in tempString
            for(int c = 0; c < tempString.length; c++){
                temp[r][c] = Double.parseDouble(tempString[x]);
                x++;
            }
        }
    }

您有3個循環,但只需要兩個循環。 從文件讀取的每個輸入行將成為二維數組的一行:

    for(int r = 0; r < 7; r++){
        tempString = scnr.nextLine().split(" ");
        temp[r] = new double[tempString.length];
        for(int c = 0; c < tempString.length; c++){
            temp[r][c] = Double.parseDouble(tempString[c]);
        }
    }

我不確定您到底需要什么。 但是我從這個問題得出的結論是,您有一個文件,需要將其拆分為2D數組,其中各列應在每一行中包含各個項目,而每一行應在新行中。

我的建議是使用ArrayList ,它將為您處理動態長度。

請參見以下示例:

說我有一個文件'text.txt',其中包含一些數據,例如

abc def ghi
jhl mnop qrs uv
wx yz

然后是一個程序,該程序形成一個2D數組,第一維包含每一行,第二維包含來自每一行的標記。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class Split {
public static void main(String args[]){
    ArrayList<ArrayList<String>> columns = new ArrayList<ArrayList<String>>();

    columns.add(new ArrayList<String>());//Col 1
    columns.add(new ArrayList<String>());//Col 2
    columns.add(new ArrayList<String>());//Col 3

BufferedReader br = null;
try
  {
    br = new BufferedReader(new FileReader("src\\text.txt"));
    String sCurrentLine;
    int j=0;
    while ((sCurrentLine = br.readLine()) != null) {
    String sLine[] = sCurrentLine .split(" ");
    for(int i = 0; i < sLine.length; i++)
    {
        columns.get(j).add(sLine[i]);
    }
    j++;
    }
    for(ArrayList<String> line:columns){
        for(String tokens:line)
            System.out.println(tokens);
        System.out.println();
    }
  } catch (IOException ex) {
       ex.printStackTrace();
  }
}
}

如果這不是您所需要的,請嘗試通過示例進一步闡述您的問題。

請注意,我使用空格(“”)分割令牌,您可以將其替換為使用的任何內容。

希望對您有所幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM