簡體   English   中英

ArrayList用於循環打印索引而不是值

[英]ArrayList for loop printing out indexes instead of value

我創建了一種方法來讀取文本文件,並從每一行中提取聯系人的姓名。

private  ArrayList<String> readContacts()
    {
        File cFile = new File ("Contacts.txt");
        BufferedReader buffer = null;
        ArrayList <String> contact = new ArrayList<String>();
        try
        {
            buffer = new BufferedReader (new FileReader (cFile));
            String text;
            String sep;
            while ((sep = buffer.readLine()) != null)
            {       
                String [] name = sep.split (",");
                text = name[1];
                contact.add(text);  
            }   
        }
        catch (FileNotFoundException e)
        {

        }
        catch (IOException k)
        {

        }
        return contact;
    }

我正在嘗試使用上面創建的方法使用每個聯系人姓名填充一個JList

model = new DefaultListModel();
for (int i = 1; i < readContacts().size(); i++)
{
  ArrayList <String> name = readContacts();
  model.addElement(name);
}

nameList = new JList (model);
add(nameList);

當我運行程序時, JList僅具有數字1-10,而不是每個聯系人名稱。 我遇到的問題是邏輯問題還是語法問題? 任何幫助將是巨大的,謝謝!

  1. 不要叫readContacts()為沒有意義的循環,從 您要創建一個新的ArrayList多次,然后將整個相同的ArrayList添加到JList中,換句話說,JList中的每個元素都是一個ArrayList(???)。
  2. 而是在for循環條件中或for循環之前調用它。
  3. 沒有空的catch(...)塊。 這樣做相當於在閉着眼睛開車時的編程效果-非常危險。

例如,

model = new DefaultListModel();
// call readContacts() only *once*
for (String name: readContacts()) {
    model.addElement(name);
}

我會說我們可以先創建一個ArrayList對象,然后將新的readContacts()分配給該對象。 之后,如果需要,循環讀取元素,可以打印出ArrayList中的每個元素,以確保它們是您想要的。

如果您的程序正在運行,則沒有syntax問題。 您的程序正在運行,但是沒有給出預期的結果。 這是一個logical問題。

您聲明:

“ JList僅具有數字1-10,而不是每個聯系人名稱。”

當我查看您的readContacts() ,您會在聯系人List填充名稱[1]。 名稱是什么[1]? 我相信您在讀文件時name [1]包含1-10。 名稱[0]或名稱[2]或名稱[3](如果它們甚至存在)中的內容。 因此,我的第一個建議是嘗試使用不同的名稱索引,因為name [1]不能給您正確的結果。

其次,使用ArrayList名稱填充model ,而不使用name的內容。 按照“氣墊船充滿鰻魚”示例填充模型。

暫無
暫無

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

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