스스로 자바를 배우는 데 도움이되도록 작성하고 각 게임에 베팅하는 데 사용하는 잔액을 유지할 수있는 계정이 포함 된 JForm GUI를 사용하여 블랙 잭 프로그램을 만듭니다. 메인 클래스 인 BlackJackApp.JForm 클래스가 있습니다. 계정은 .txt 파일에 저장되며 readFile 및 writeFile 메소드가 포함 된 Account 클래스를 사용하여 읽습니다. 가 (내 해시 맵은 null 값만 넣고 있습니다.
홍길동 >> 1000000
잭 블랙 >> 1
밥 돌 >> 987654321
: 나는이 값 Accounts.txt라는 이름의 샘플 txt 파일을 생성 실제 txt 파일의 줄 사이에 공백 없음)
텍스트 파일을 읽고이 값을 HashMap에 첨부하는 방법이 있습니다. 이것은 내가 가지고있는 코드입니다. 단지 상부는 참조
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 코드 디버깅이기 포함하여
는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 클래스가 해당 코드이다. 이 출력은 다음과 같습니다.
John Doe 1000000 1000000
Jack Black 1 1
Bob Dole 987654321 987654321
[Bob Dole, John Doe, Jack Black]
null
null
null
내 질문은 이것입니다. 내 해시 맵이 올바른 키를 넣고 값이 null 인 이유는 무엇입니까? lineString 배열이 올바르게 채워지는 경우 Integer accountBalance도 마찬가지지만 실제로 키/값 쌍을 hashmap에 넣는 경우 accountBalance가 null이 아니더라도 키만 넣고 값은 null로 남겨 둡니다. 왜 이런거야? 이 문제와 관련된 조언을 위해 수많은 스레드 검색을 시도했지만 그 조언이 하나도 없습니다. 간과 할 수있는 뭔가가 있어야하지만 초보자로서 문제가있는 곳을 인식하는 것이 어렵습니다.
내가 마침내 내가 어디로 잘못되었는지 이해합니다. 정말 고마워요! 또한 fillAccountBox() 메서드에서 코드를 변경하여 상자가 hashmap의 키 ArrayList로 채워지도록했습니다. – Matthew
오신 것을 환영합니다. 기꺼이 도와 드리겠습니다.그건 그렇고, 단지 두 가지 더 : 1) Map 인터페이스에는 [값] (http://docs.oracle.com/javase/8/docs/api/java/util/Map.html#values)도 있습니다. -) 메서드를 사용하여 fillAccountNameBox 메서드와 같이 키가 필요하지 않은 경우 값 컬렉션을 가져올 수 있습니다. 2) 제네릭에 유형을 추가하는 것이 좋습니다. * HashMap * 그들을 남겨 두지 않고 대신 _HashMap_ –