簡體   English   中英

嘗試用Java創建2D ArrayList

[英]Try to create a 2D ArrayList in Java

我正在嘗試讀取文件。 我想將文件的內容存儲在2D arraylist中,其中列表中的每個位置都包含一個字符。 我想要它,以便原始文本文件中的每一行都是數組列表中的一行。 例如,如果文本文件的輸入為:

a,b,c

d,e,f

g,h,i

那么該數組希望看起來像:{[a,b,c],[d,e,f],[g,h,i]}。 不幸的是,目前我的結果只是[a,b,c,d,e,f,g,h,i]。 任何想法將不勝感激,我是Java新手。 謝謝。

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

public class Coursework1
{
    public static void main(String[] args)
    {
    try {
        List<String> list = new ArrayList<String>();

        String thisLine = null;
        BufferedReader br;
        br = new BufferedReader(new FileReader("map.txt"));

        while ((thisLine = br.readLine()) != null) {
        list.add(thisLine);
        }

        char[][] firstDimension = new char[list.size()][];
        for (int i = 0; i < list.size(); i++) {
        firstDimension[i] = list.get(i).toCharArray();
        }


        for (int i=0;i<firstDimension.length;i++) {
        for (int j=0;j<firstDimension[i].length;j++) {
            System.out.println(firstDimension[i][j]);
        }
        }

    } 
    catch (Exception e) {
        e.printStackTrace();
    }
    }
}

您的答案實際上是正確的,並且功能正常。 您的測試代碼是錯誤的,因為它放入了太多新行。

for (int i=0;i<firstDimension.length;i++) 
{
       System.out.println();
       for (int j=0;j<firstDimension[i].length;j++) 
       {
            System.out.print(firstDimension[i][j]);
       }
}

似乎您還沒有完全理解數組和數組列表之間的區別。

數組是一個包含固定數量的單一類型值的容器對象。 創建數組時將確定數組的長度。 創建后,其長度是固定的。 因此,在創建尺寸之前必須知道尺寸,或者必須創建足夠大的尺寸。

另一方面, ArrayList是一個集合(復雜類型,請參閱本教程以獲取更多信息),它可以容納簡單的對象,集合等。ArrayList可以想象成一個動態數組-您不必知道初始大小,如果您添加或刪除元素,它會自動調整大小。

像這樣遍歷ArrayList是一個好習慣

List<String> names = new ArrayList<String>();
// add something

// foreach loop
for (String name : names) {
    // here you have access directly to the value 
    // and you don't have to write list.get(index)
    System.out.println(name);
}

現在向您提問。 如果您閱讀上面的鏈接,則應該可以自己構建它。 但是,如果您仍然不知道:

List<List<String>> twoDimensionList = new ArrayList<List<String>>();

使用foreach循環進行迭代

for (List<String> innerList : twoDimensionList) {
    for (String value : innerList) {
        ...
    }
}

您可以將列表嵌入列表中,例如:

List<List<String>> matrix = new ArrayList<List<String>>();

然后訪問您想要的元素,

matrix.get(1).get(2);

編輯:我也建議您考慮更多是否需要ArrayArrayList 他們不一樣。 數組列表是可調整大小的(您可以不斷向其添加更多元素,而不必強迫數組列表中只包含這么多元素。這使您可以執行類似List<List<String>>對象的操作其中不是每個第二維都具有相同的長度。另一方面,數組具有與之相關的特定大小,這使您能夠強制所有行具有相同的長度,並且所有列具有相同的高度...

您的代碼有效,只是錯誤地輸出了結果。 嘗試:

        for (int i = 0; i < firstDimension.length; i++)
        {
            for (int j = 0; j < firstDimension[i].length; j++)
            {
                System.out.print(firstDimension[i][j]);
            }
            System.out.println();
        }

這將從同一行上的字符打印出來,好吧,在同一行上...

每行(字符串)已經是一個字符列表,這些字符帶有使您可以對其進行迭代的方法(長度,charAt)。 因此,取決於您要實現的字符串列表,可能就足夠了。

暫無
暫無

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

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