亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 .txt 文件構建二維數組的問題

從 .txt 文件構建二維數組的問題

達令說 2023-07-13 15:51:05
我已經能夠使用 .txt 文件創建數組。但是,現在在打印數組時,它會重復打印最后一行,而不是之前的行。我相信我分配了正確的值并確保將它們分配給數組。我嘗試循環遍歷并為每個索引分配正確的值,然后向下遍歷每一行,直到它們全部分配完畢。然而,這導致最終壓倒一切。private double[][] Grid;public GridMonitor(String filename) throws FileNotFoundException{    Scanner FileName = new Scanner(new BufferedReader(new FileReader(filename)));    int totalRow = 0;    while (FileName.hasNextLine())    {        String[] string = FileName.nextLine().trim().split(" ");        totalRow++;        Grid = new double[totalRow][string.length];        for(int i = 0; i < totalRow; i++)        {            for(int j = 0; j < string.length; j++)            {                Grid[i][j] = Double.parseDouble(string[j]);            }        }        System.out.println(Arrays.deepToString(Grid));    }    System.out.println(Arrays.deepToString(Grid));    FileName.close();}它應該顯示類似于的結果[3.0][3.0], [2.0][10.0][7.0], [5.0][6.0][9.0], [4.0][5.0][8.0]但相反顯示[4.0][5.0][8.0], [4.0][5.0][8.0], [4.0][5.0][8.0], [4.0][5.0][8.0]
查看完整描述

3 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

您的問題是您重復將新數組分配給 Grid ,從而Grid = new double[totalRow][string.length];覆蓋舊值。



查看完整回答
反對 回復 2023-07-13
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

嵌套 for 循環存在問題,網格每次都由同一行填充。刪除外部循環并將行計數器初始化為 0 并在外部 while 循環內遞增它。


int rc = 0;

while ( Filename.hasNextLine()){

// Code before Nested For loop

for(j=0;j<string.length;j++){

Grid[rc][j] = // your code

}

rc++;

}


查看完整回答
反對 回復 2023-07-13
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

我認為您錯過了數組具有像這樣的行和列:double[][] grid = new double[row][col],因此當您逐行讀取文件時,您無法在獲得最后一行之前找出行數。


public static double[][] readGridFromFile(Path file) throws FileNotFoundException {

    final Pattern space = Pattern.compile("\\s+");


    try (Scanner scan = new Scanner(new BufferedReader(new FileReader(file.toFile())))) {

        List<double[]> lines = new ArrayList<>();


        while (scan.hasNextLine()) {

            lines.add(Arrays.stream(space.split(scan.nextLine().trim()))

                            .mapToDouble(Double::parseDouble)

                            .toArray());

        }


        double[][] grid = new double[lines.size()][];

        int row = 0;


        for (double[] line : lines)

            grid[row++] = line;


        return grid;

    }

}


查看完整回答
反對 回復 2023-07-13
  • 3 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號