java - 文字游戏导入TXT文件
问题描述
我将如何设置仅扫描 Word 文档中的单词的分数拼字游戏类型游戏。因此,在下面的代码中,我将有一个包含 30 个不同单词的文本文件,然后我不需要文件中所有行的 println 以及每个工作的点数,即赛车是 11 个点
import java.util.HashMap;
import java.util.Map;
class Scrabble {
private String word;
Scrabble(String word) {
this.word = word;
}
int getScore() {
Map<Character, Integer> lettersMap = new HashMap<>();
String lettersCap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < lettersCap.length(); i++) {
if (lettersCap.charAt(i) == 'A' || lettersCap.charAt(i) == 'E' ||
lettersCap.charAt(i) == 'I' || lettersCap.charAt(i) == 'O' ||
lettersCap.charAt(i) == 'U' || lettersCap.charAt(i) == 'L' ||
lettersCap.charAt(i) == 'N' || lettersCap.charAt(i) == 'R' ||
lettersCap.charAt(i) == 'S' || lettersCap.charAt(i) == 'T') {
lettersMap.put(lettersCap.charAt(i), 1);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 1);
}
if (lettersCap.charAt(i) == 'D' || lettersCap.charAt(i) == 'G') {
lettersMap.put(lettersCap.charAt(i), 2);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 2);
}
if (lettersCap.charAt(i) == 'B' || lettersCap.charAt(i) == 'C' ||
lettersCap.charAt(i) == 'M' || lettersCap.charAt(i) == 'P') {
lettersMap.put(lettersCap.charAt(i), 3);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 3);
}
if (lettersCap.charAt(i) == 'F' || lettersCap.charAt(i) == 'H' ||
lettersCap.charAt(i) == 'V' || lettersCap.charAt(i) == 'W' ||
lettersCap.charAt(i) == 'Y') {
lettersMap.put(lettersCap.charAt(i), 4);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 4);
}
if (lettersCap.charAt(i) == 'K') {
lettersMap.put(lettersCap.charAt(i), 5);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 5);
}
if (lettersCap.charAt(i) == 'J' || lettersCap.charAt(i) == 'X') {
lettersMap.put(lettersCap.charAt(i), 8);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 8);
}
if (lettersCap.charAt(i) == 'Q' || lettersCap.charAt(i) == 'Z') {
lettersMap.put(lettersCap.charAt(i), 10);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 10);
}
}
int totalValue = 0;
for (int j = 0; j < word.length(); j++) {
totalValue += lettersMap.get(word.charAt(j));
}
return totalValue;
}
}
解决方案
填写一次地图并使用从文件中读取,我猜每一行只有一个单词。
您可以从Files#lines读取文件并遍历每一行并计算每个单词的分数
public class Scrabble {
private static Map<Character, Integer> lettersMap = new HashMap<>();
static {
fillMap();
}
private static void fillMap() {
String lettersCap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < lettersCap.length(); i++) {
if (lettersCap.charAt(i) == 'A' || lettersCap.charAt(i) == 'E' || lettersCap.charAt(i) == 'I'
|| lettersCap.charAt(i) == 'O' || lettersCap.charAt(i) == 'O' || lettersCap.charAt(i) == 'U'
|| lettersCap.charAt(i) == 'L' || lettersCap.charAt(i) == 'N' || lettersCap.charAt(i) == 'R'
|| lettersCap.charAt(i) == 'S' || lettersCap.charAt(i) == 'T') {
lettersMap.put(lettersCap.charAt(i), 1);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 1);
} else if (lettersCap.charAt(i) == 'D' || lettersCap.charAt(i) == 'G') {
lettersMap.put(lettersCap.charAt(i), 2);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 2);
} else if (lettersCap.charAt(i) == 'B' || lettersCap.charAt(i) == 'C' || lettersCap.charAt(i) == 'M'
|| lettersCap.charAt(i) == 'P') {
lettersMap.put(lettersCap.charAt(i), 3);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 3);
} else if (lettersCap.charAt(i) == 'F' || lettersCap.charAt(i) == 'H' || lettersCap.charAt(i) == 'V'
|| lettersCap.charAt(i) == 'W' || lettersCap.charAt(i) == 'Y') {
lettersMap.put(lettersCap.charAt(i), 4);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 4);
} else if (lettersCap.charAt(i) == 'K') {
lettersMap.put(lettersCap.charAt(i), 5);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 5);
} else if (lettersCap.charAt(i) == 'J' || lettersCap.charAt(i) == 'X') {
lettersMap.put(lettersCap.charAt(i), 8);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 8);
} else if (lettersCap.charAt(i) == 'Q' || lettersCap.charAt(i) == 'Z') {
lettersMap.put(lettersCap.charAt(i), 10);
lettersMap.put(lettersCap.toLowerCase().charAt(i), 10);
}
}
}
public static int readFileAndGetScore(String fileName) {
int result = 0;
Files.lines(new File(fileName).toPath()).forEach(wordInLine -> {
result += getScore(wordInLine);
});
return result;
}
private static int getScore(String word) {
int totalValue = 0;
for (int j = 0; j < word.length(); j++) {
totalValue += lettersMap.get(word.charAt(j));
}
return totalValue;
}
}
main
功能
public static void main(String[] args) {
String fileName = "data.txt";
int totalScore = Scrabble.readFileAndGetScore(fileName);
System.out.println(totalScore);
}
推荐阅读
- bash - 如何在 MacOS 中使用 bash 打开和关闭应用程序
- mongodb - 如何按mongodb中的值数组排序
- css - ion-item / ion-native 背景颜色
- reactjs - React:要重用的材料 ui 样式按钮不适应样式
- go - 如何处理长时间运行的服务器响应和将其视为停止连接的负载均衡器
- python - 将 API unicode 响应保存到 zip 文件 python
- elixir - 如何确保 distillery 在版本中包含 Erlang inets?
- meteor - 2019年流星值得用吗?它还活着吗?
- spring - 如何调整 Spring Boot 安全配置?
- javascript - 在传递给反应路由器的理解路径中有问题