import java.io.*;import java.util.*;public class IdiomProcessor { public static void main(String[] args) { try { FileReader fr = new FileReader("idioms.txt"); BufferedReader br = new BufferedReader(fr); String line; HashMap<Character, ArrayList<String>> idiomMap = new HashMap<>(); while ((line = br.readLine()) != null) { String[] parts = line.trim().split(":"); String idiom = parts[0]; String pinyin = parts[1]; char tail = idiom.charAt(idiom.length() - 1); if (!idiomMap.containsKey(tail)) { idiomMap.put(tail, new ArrayList<String>()); } idiomMap.get(tail).add(idiom); } br.close(); fr.close(); ArrayList<String> result = new ArrayList<>(); FileReader fr2 = new FileReader("idioms.txt"); BufferedReader br2 = new BufferedReader(fr2); while ((line = br2.readLine()) != null) { String[] parts = line.trim().split(":"); String idiom = parts[0]; String pinyin = parts[1]; char tail = idiom.charAt(idiom.length() - 1); int count = idiomMap.get(tail).size() - 1; result.add(line.trim() + " " + count); } br2.close(); fr2.close(); FileWriter fw = new FileWriter("result.txt"); BufferedWriter bw = new BufferedWriter(fw); for (String line2 : result) { bw.write(line2); bw.newLine(); } bw.close(); fw.close(); } catch (IOException e) { e.printStackTrace(); } }}为啥这代码count全相等
时间: 2024-02-14 20:32:58 浏览: 164
这个问题是因为在统计每个成语的尾字母时,代码使用了HashMap,这个HashMap的键是每个成语的尾字母,对应的值是以该尾字母结尾的成语列表。在第二个while循环中,对于每个成语,都会根据尾字母查找对应的成语列表,并统计该列表长度,然后将该长度作为count输出。由于对于同一尾字母的成语列表长度是相同的,因此最终统计出的count全相等。
为了解决这个问题,可以考虑使用另外一个HashMap来记录每个成语的尾字母出现的次数,然后在第二个while循环中,根据尾字母查找对应的出现次数,而不是成语列表长度。这样就可以得到每个成语实际上应该对应的count值。
相关问题
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.border.EmptyBorder; public class SensitiveWordAnalyzer extends JFrame { private JPanel contentPane; private JTextField textFile; private JTextField textKeyword; private JList<String> listWords; private Map<String, Integer> wordMap; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { SensitiveWordAnalyzer frame = new SensitiveWordAnalyzer(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public SensitiveWordAnalyzer() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300);分析这段代码
这段代码定义了一个名为SensitiveWordAnalyzer的Java GUI应用程序。该应用程序可以用来分析文本文件中的敏感词并统计它们出现的次数。应用程序包含一个JFrame窗口和几个Swing组件,包括JPanel、JTextField、JList、JScrollPane、JLabel和JButton等。
在GUI中,用户可以选择要分析的文本文件,还可以添加或删除敏感词。文本文件和敏感词都保存在内存中的Map中。当用户单击“分析”按钮时,应用程序将读取文本文件并搜索其中的敏感词。在JList中,用户可以查看所有的敏感词及其出现次数。
该应用程序使用了Java的Swing GUI库来创建用户界面。它还使用了Java的文件I/O类来读取和写入文件。
补全代码:nalysisResult.javaimport java.io.*;import java.util.*;public class AnalysisResult { public static void main(String args[]) { //使用循环按行读取文件 //调用Fenxi.getTotalScore()获取解析出的总成绩,并写入scoreAnalysis.txt中 }}Fenxi.javaimport java.util.*;public class Fenxi { public static double getTotalScore(String s) { String regex="[^0123456789]" ; //匹配非数字的正则表达式 String digitMess=s.replaceAll(regex,"*"); StringTokenizer fenxi = new StringTokenizer(digitMess,"*"); double totalScore=0; while(fenxi.hasMoreTokens()){ double score = Double.parseDouble(fenxi.nextToken()); //累加 totalScore } return totalScore; }}
import java.io.*;
import java.util.*;
public class AnalysisResult {
public static void main(String args[]) {
try {
File file = new File("score.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
double totalScore = 0;
while ((line = bufferedReader.readLine()) != null) {
totalScore += Fenxi.getTotalScore(line);
}
bufferedReader.close();
FileWriter fileWriter = new FileWriter("scoreAnalysis.txt");
fileWriter.write("总成绩:" + totalScore);
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.util.*;
public class Fenxi {
public static double getTotalScore(String s) {
String regex = "[^0123456789]";
String digitMess = s.replaceAll(regex, "*");
StringTokenizer fenxi = new StringTokenizer(digitMess, "*");
double totalScore = 0;
while (fenxi.hasMoreTokens()) {
double score = Double.parseDouble(fenxi.nextToken());
totalScore += score;
}
return totalScore;
}
}
阅读全文