我的hashmap只放置空值

时间:2017-04-18 05:11:54

标签: java null hashmap jform

为了帮助自己学习java,我正在使用JForm GUI创建一个二十一点程序,其中包含您可以创建的帐户,并保持用于在每个游戏上下注的运行余额。我有一个BlackJackApp.JForm类,它是主类。帐户存储在.txt文件中,并使用包含readFile和writeFile方法的Account类读取。我创建了一个名为Accounts.txt的示例txt文件,其中包含以下值:

John Doe>>  1000000

Jack Black>> 1

Bob Dole>> 987654321

(实际txt文件中的行之间没有空格)

我有一个方法可以读取文本文件并将这些值附加到HashMap。这是我对该方法的代码。

public void readFile()
{
   accountsMap.clear();
   BufferedReader br;

   try
   {    
     br = new BufferedReader(new FileReader("Accounts.txt"));
     String nextLine = br.readLine();

        while(nextLine != null)
        {
           String lineString[] = nextLine.split(">>");
           Integer accountBalance = Integer.parseInt(lineString[1]);
           System.out.println(lineString[0] + " " + lineString[1] + " " + 
           accountBalance);
           accountsMap.put(lineString[0], accountBalance); 
           nextLine = br.readLine();  
        }
        br.close();
   }
   catch(IOException frex)
   {System.out.println("An error has occurred while reading the file");}
}

这是我对JForm类的相关代码,只包含顶部部分供参考

public class BlackjackApp extends javax.swing.JFrame {

Account a = new Account();
String account;
Integer accountBalance;
HashMap accountsMap = a.getAccountsMap();


public void fillAccountNameBox()
{

   for (int i = 0; i < accountsMap.size(); i++)
   {
       accountNameBox.addItem((String) accountsMap.get(i));
   }


}

public BlackjackApp() {
    initComponents();
    a.readFile();
    fillAccountNameBox(); //fills comboBox component w/ list of hashMap keys
    System.out.println(accountsMap.keySet());
    for(int i = 0; i < accountsMap.size(); i++)
        System.out.println(accountsMap.get(i));

}

system.out.println代码用于调试。这是输出:

John Doe 1000000 1000000
Jack Black 1 1
Bob Dole 987654321 987654321
[Bob Dole, John Doe, Jack Black]
null
null
null

我的问题是:为什么我的hashmap放入正确的键,但是将它们的值保留为null? lineString数组正确填充,Integer accountBalance也是如此,但是当实际将键/值对放入hashmap时,它只会将键放入并且即使accountBalance不为null也会将其值保留为null。为什么是这样?我已经尝试搜索了很多线程以获得有关此问题的建议,但他们的建议都没有对我有用。必须有一些东西可以忽略,但作为一个初学者,我很难认识到问题所在。

2 个答案:

答案 0 :(得分:2)

您的地图中包含您希望其包含的内容。问题是你如何访问它。

正如您所指出的,地图中的键如下:

[Bob Dole, John Doe, Jack Black]

在最后的for循环中,您希望访问映射到键012的值。由于这些密钥在您的地图中不存在,您将获得null

答案 1 :(得分:2)

问题依赖于您打印信息的方式。 Map.get方法希望您传递一个带有键的参数,该键具有您想要的值。在for循环中,您要求附加到键0,1和2的值 - 因此为空值。 将您的代码更改为:

for(String key : accountsMap.keySet())
    System.out.println(accountsMap.get(key));

如您所见,我还更改了for循环结构以使用for-each。

希望这会对你有所帮助。