ここで最も大きな問題は、ハッシュマップを理解していないことと、いくつかのチュートリアルを見ても操作する方法です。うまくいけば、あなたは賢明な魂が正しい軌道で私を指すことができるようになります。.txtファイルをハッシュマップに読み込んで操作する
私は.txtファイルをハッシュマップに読み込もうとしています。テキストファイルには、2006年の名前の人気があります。inputFileの各行には、男の子の名前と女の子の名前とその名前がいくつ含まれています。例えば、1 Jacob 24,797 Emily 21,365は、1行目のファイルからの入力です。
男の子の名前を1つのリストに入れ、女の子の名前を2番目のリストに入れて、現在の位置を維持してユーザージャコブを検索して、その年の第1位の男の子名だったと言われます。他の名前についても同様です。以前は、ファイルを1行ずつ読み込んでいて、そのファイルに含まれていたファイル名の行を探していました。これはうまくいきましたが、男の子の名前か女の子の名前なのかわからず、ジェイコブが女の子のためにどれほど人気があるのかを探していたとしたら、それはまだ1番です。これを回避するには最良の方法ですが、実際にはそれを動作させることはできません。
マイコード
public void actionPerformed(ActionEvent e)
{
//Parse Input Fields
String name = inputArea.getText();
if (name.equals(""))
{
JOptionPane.showMessageDialog(null, "A name is required.", "Alert", JOptionPane.WARNING_MESSAGE);
return;
}
String genderSelected = genderList.getSelectedItem().toString();
String yearSelected = yearList.getSelectedItem().toString();
String yearFile = "Babynamesranking"+yearSelected+".txt"; //Opens a different name file depending on year selection
boolean foundName = false;
Map<String, String> map = new HashMap<String,String>(); //Creates Hashmap
try
{
File inputFile = new File(yearFile); //Sets input file to whichever file chosen in GUI
FileReader fileReader = new FileReader(inputFile); //Creates a fileReader to open the inputFile
BufferedReader br = new BufferedReader(fileReader); //Creates a buffered reader to read the fileReader
String line;
int lineNum = 1; //Incremental Variable to determine which line the name is found on
while ((line = br.readLine()) != null)
{
if (line.contains(name))
{
outputArea.setText(""+name+" was a popular name during "+yearSelected+".");
outputArea.append("\nIt is the "+lineNum+" most popular choice for "+genderSelected+" names that year.");
foundName = true;
}
String parts[] = line.split("\t");
map.put(parts[0],parts[1]);
lineNum++;
}
fileReader.close();
}
catch(IOException exception)
{
exception.printStackTrace();
}
String position = map.get(name);
System.out.println(position);
}
サンプルで、inputFile:
1 Jacob 24,797 Emily 21,365
2 Michael 22,592 Emma 19,092
3 Joshua 22,269 Madison 18,599
4 Ethan 20,485 Isabella 18,200
5 Matthew 20,285 Ava 16,925
6 Daniel 20,017 Abigail 15,615
7 Andrew 19,686 Olivia 15,474
8 Christopher 19,635 Hannah 14,515
男の子の名前の後に女の子の名前が続く場合や、逆の場合がありますか? –
これはいつものケースです – Justiciar
(男の子が選ばれている)場合は[0]、それ以外の場合は[1]を見てください。 – ndlu