我的哈希图只放空值
My hashmap is only putting null values
为了帮助自己学习 java,我正在使用 JForm GUI 创建一个 21 点程序,其中包括您可以创建的帐户并保持 运行 余额,您可以在每场游戏中下注。我有一个 BlackJackApp.JForm class,这是主要的 class。帐户存储在 .txt 文件中,并使用包含 readFile 和 writeFile 方法的帐户 class 读取。我创建了一个示例 txt 文件,名为 Accounts.txt,具有以下值:
李四>>1000000
杰克布莱克>>1
鲍勃多尔>>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 class 准备的相关代码,仅包含顶部部分以供参考
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 数组正确填充,Integer accountBalance 也是如此,但是当涉及到实际将 key/value 对放入 hashmap 时,它只放入键并保留它们的值 null,即使 accountBalance 不为 null .为什么是这样?我曾尝试在多个主题中搜索与此问题相关的建议,但他们的 none 个建议对我有用。肯定有一些我忽略的东西,但作为初学者,我很难识别问题出在哪里。
您的地图完全包含您希望包含的内容。问题在于您如何访问它。
正如您所指出的,地图中的键如下:
[Bob Dole, John Doe, Jack Black]
在最后的 for
循环中,您要访问映射到键 0
、1
和 2
的值。由于这些键在您的地图中不存在,您将得到 null
.
问题取决于您打印信息的方式。
Map.get 方法期望您传递一个带有键的参数,您想要其值。在 for 循环中,您要求附加到键 0、1 和 2 的值 - 因此是空值。
将您的代码更改为:
for(String key : accountsMap.keySet())
System.out.println(accountsMap.get(key));
如您所见,我还更改了 for 循环结构以使用 for-each。
希望对您有所帮助。
为了帮助自己学习 java,我正在使用 JForm GUI 创建一个 21 点程序,其中包括您可以创建的帐户并保持 运行 余额,您可以在每场游戏中下注。我有一个 BlackJackApp.JForm class,这是主要的 class。帐户存储在 .txt 文件中,并使用包含 readFile 和 writeFile 方法的帐户 class 读取。我创建了一个示例 txt 文件,名为 Accounts.txt,具有以下值:
李四>>1000000
杰克布莱克>>1
鲍勃多尔>>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 class 准备的相关代码,仅包含顶部部分以供参考
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 数组正确填充,Integer accountBalance 也是如此,但是当涉及到实际将 key/value 对放入 hashmap 时,它只放入键并保留它们的值 null,即使 accountBalance 不为 null .为什么是这样?我曾尝试在多个主题中搜索与此问题相关的建议,但他们的 none 个建议对我有用。肯定有一些我忽略的东西,但作为初学者,我很难识别问题出在哪里。
您的地图完全包含您希望包含的内容。问题在于您如何访问它。
正如您所指出的,地图中的键如下:
[Bob Dole, John Doe, Jack Black]
在最后的 for
循环中,您要访问映射到键 0
、1
和 2
的值。由于这些键在您的地图中不存在,您将得到 null
.
问题取决于您打印信息的方式。 Map.get 方法期望您传递一个带有键的参数,您想要其值。在 for 循环中,您要求附加到键 0、1 和 2 的值 - 因此是空值。 将您的代码更改为:
for(String key : accountsMap.keySet())
System.out.println(accountsMap.get(key));
如您所见,我还更改了 for 循环结构以使用 for-each。
希望对您有所帮助。