为了帮助自己学习Java,我正在使用JFOR GUI创建一个二十一点程序,其中包括您可以创建的帐户,并保持您在每个游戏上使用的运行平衡。我有一个blackjackapp.jform类,这是主要类。这些帐户存储在.txt文件中,并使用包含ReadFile和WriteFile方法的帐户类读取。我创建了一个示例txt文件,名为accounts.txt,其中具有以下值:
John Doe>> 1000000
杰克·布莱克>> 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放入正确的键,而将其值无效?Linestring阵列正正确填充,整数帐户平均数也是如此,但是当涉及到实际将密钥/值对放入hashmap中时,它只会将键放入键,即使帐户余量不为null,也将其值留下了null。为什么是这样?我尝试搜索许多有关此问题的建议,但他们的建议都不适合我。我必须忽略某些东西,但是作为初学者,我很难认识到问题所在。
问题依赖于您打印信息的方式。MAP.GET方法期望您通过一个键传递一个参数,其值您想要。在for循环中,您要求附加到键0、1和2的值 - 因此,零值。更改您的代码:
for(String key : accountsMap.keySet())
System.out.println(accountsMap.get(key));
您可以看到,我还更改了用于使用for-each的for循环结构。
希望这对您有帮助。
您的地图完全包含您想要的包含的内容。问题是您的访问方式。
正如您指出的那样,地图中的键如下:
[Bob Dole, John Doe, Jack Black]
在最终的for
循环中,您正在寻找访问映射到键0
,1
和2
的值。由于这些键在地图中不存在,因此您将获得null
。