public class IdiomProcessor { public static void main(String[] args) { try { FileReader fr = new FileReader("D:\yy\java\成语接龙\成语大全\去重后.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 info = parts[1]; if(!idiom.isEmpty()) { 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("D:\yy\java\成语接龙\成语大全\去重后.txt"); BufferedReader br2 = new BufferedReader(fr2); while ((line = br2.readLine()) != null) { String[] parts = line.trim().split("拼音:"); String idiom = parts[0]; //String info = parts[1]; if(!idiom.isEmpty()) { 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("D:\yy\java\成语接龙\成语大全\全量成语处理后.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-03-14 14:43:22 浏览: 61
iniHandler:在 Java 中处理 ini 文件
可以尝试修改第二个while循环中的计算count的方式,具体方法如下:
1. 在第一个while循环中,使用另外一个HashMap来记录每个成语的尾字母出现的次数,键为成语的尾字母,值为对应的出现次数。
2. 在第二个while循环中,对于每个成语,先根据尾字母查找对应的成语列表,然后遍历该列表,统计其中可以接上该成语的个数。具体方法是,对于列表中的每个成语,将其尾字母作为键,查找对应的出现次数,将该出现次数作为可接个数。然后将所有可接个数相加,作为该成语的count值。
修改后的代码如下:
```java
public class IdiomProcessor {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("D:\yy\java\成语接龙\成语大全\去重后.txt");
BufferedReader br = new BufferedReader(fr);
String line;
HashMap<Character, ArrayList<String>> idiomMap = new HashMap<>();
HashMap<Character, Integer> countMap = new HashMap<>(); // 新增计数Map
while ((line = br.readLine()) != null) {
String[] parts = line.trim().split("拼音:");
String idiom = parts[0];
if(!idiom.isEmpty()) {
char tail = idiom.charAt(idiom.length() - 1);
if (!idiomMap.containsKey(tail)) {
idiomMap.put(tail, new ArrayList<String>());
}
idiomMap.get(tail).add(idiom);
if(!countMap.containsKey(tail)) {
countMap.put(tail, 0);
}
countMap.put(tail, countMap.get(tail) + 1); // 尾字母计数加1
}
}
br.close();
fr.close();
ArrayList<String> result = new ArrayList<>();
FileReader fr2 = new FileReader("D:\yy\java\成语接龙\成语大全\去重后.txt");
BufferedReader br2 = new BufferedReader(fr2);
while ((line = br2.readLine()) != null) {
String[] parts = line.trim().split("拼音:");
String idiom = parts[0];
if(!idiom.isEmpty()) {
char tail = idiom.charAt(idiom.length() - 1);
ArrayList<String> idiomList = idiomMap.get(tail);
int count = 0;
for(String s : idiomList) {
if(s.equals(idiom)) continue; // 自己不能接自己
char first = s.charAt(0);
if(first == tail) {
count += countMap.get(first);
}
}
result.add(line.trim() + " 可接:" + count);
}
}
br2.close();
fr2.close();
FileWriter fw = new FileWriter("D:\yy\java\成语接龙\成语大全\全量成语处理后.txt");
BufferedWriter bw = new BufferedWriter(fw);
for (String line2 : result) {
bw.write(line2);
bw.newLine();
}
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
阅读全文