
在开发一个基于字母得分的单词计分游戏时,一个常见需求是从文本文件中读取单词,并根据每个字母预设的分值计算出单词的总分。原始代码尝试使用switch语句来实现字母计分,但存在几个关键问题,导致最终输出的单词得分始终为零:
正确的实现方式需要逐个处理单词中的字符,并为每个字符累加对应的分数。
要正确实现单词字母计分功能,我们需要遵循以下步骤:
下面是一个完整的Java示例代码,演示了如何实现上述计分逻辑:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class WordPointsCalculator {
public static void main(String[] args) {
String fileName = "words.txt"; // 假设你的文本文件名为words.txt
// 创建一个示例文件用于测试,如果文件不存在
// 实际应用中,你需要确保words.txt文件存在并包含内容
createSampleFile(fileName);
try {
File file = new File(fileName);
Scanner sc = new Scanner(file);
System.out.println("--- 单词得分计算结果 ---");
while (sc.hasNextLine()) {
String line = sc.nextLine();
String word = line.trim(); // 去除首尾空格
if (word.isEmpty()) { // 跳过空行
continue;
}
int totalWordPoints = 0; // 初始化当前单词的总分
// 将单词转换为小写,以便不区分大小写地计算分数
String lowerCaseWord = word.toLowerCase();
// 遍历单词中的每一个字符
for (char c : lowerCaseWord.toCharArray()) {
int charPoints = 0; // 当前字符的得分
// 根据字母规则计算得分
switch (c) {
case 'a':
case 'e':
case 'i':
case 'l':
case 'n':
case 'o':
case 'r':
case 's':
case 't':
case 'u':
charPoints = 1;
break;
case 'd':
case 'g':
charPoints = 2;
break;
case 'b':
case 'c':
case 'm':
case 'p':
charPoints = 3;
break;
case 'f':
case 'h':
case 'v':
case 'w':
case 'y':
charPoints = 4;
break;
case 'k':
charPoints = 5;
break;
case 'j':
case 'x':
charPoints = 8;
break;
case 'q':
case 'z':
charPoints = 10;
break;
default:
// 对于非字母字符(如数字、标点符号)或未定义的字母,得分为0
charPoints = 0;
break;
}
totalWordPoints += charPoints; // 累加到单词总分
}
System.out.println(word + " - 得分: " + totalWordPoints + " 分");
}
sc.close(); // 关闭Scanner
} catch (FileNotFoundException e) {
System.err.println("错误:文件未找到 - " + fileName);
System.err.println("请确保 'words.txt' 文件存在于程序运行的相同目录下。");
}
}
// 辅助方法:创建用于测试的words.txt文件
private static void createSampleFile(String fileName) {
File file = new File(fileName);
if (!file.exists()) {
try (java.io.FileWriter writer = new java.io.FileWriter(file)) {
writer.write("Hello\n");
writer.write("World\n");
writer.write("Java\n");
writer.write("Programming\n");
writer.write("Example\n");
writer.write("Quiz\n");
writer.write("Zebra\n");
writer.write(" \n"); // 空行
writer.write("123abc\n"); // 包含数字的行
System.out.println("已创建示例文件: " + fileName);
} catch (java.io.IOException e) {
System.err.println("创建示例文件失败: " + e.getMessage());
}
}
}
}为了运行上述代码,请确保在与WordPointsCalculator.java相同的目录下创建一个名为words.txt的文本文件,并在其中输入一些单词,例如:
立即学习“Java免费学习笔记(深入)”;
Hello World Java Programming Example Quiz Zebra
或者直接运行代码,它会尝试自动创建这个示例文件。
文件和Scanner初始化:
File file = new File(fileName); Scanner sc = new Scanner(file);
这部分代码用于指定要读取的文件,并创建一个Scanner对象来读取其内容。try-catch块用于处理FileNotFoundException,确保程序在文件不存在时能够优雅地处理。
逐行读取:
while (sc.hasNextLine()) {
String line = sc.nextLine();
String word = line.trim(); // 去除首尾空格
if (word.isEmpty()) { // 跳过空行
continue;
}
// ...
}while (sc.hasNextLine())循环会持续读取文件的每一行,直到文件末尾。line.trim()用于去除每行可能存在的首尾空格,if (word.isEmpty()) continue;则用于跳过文件中的空行,避免不必要的处理。
ERMEB云盘发卡系统官方正版系统发卡系统操作简单、方便、易懂,系统微信小程序前端采用nuiapp、后端采用think PHP6,PC前端采用vue开发,使用场景:文件上传储存。适合个人/个体/中小企业使用,本系统配合微信小程序端进行使用,文件下载以及发卡商品卡密领取都需要进入小程序内获取下载码以及卡密领取,小程序内可设置积分充值以及任务获取积分,支持微信激励广告领取文件下载码以及卡密商品,可实现
0
单词总分初始化与大小写转换:
int totalWordPoints = 0; String lowerCaseWord = word.toLowerCase();
totalWordPoints变量在处理每个新单词时都会被重置为0,以确保每个单词的得分独立计算。word.toLowerCase()是关键一步,它将当前单词转换为小写,这样无论输入是大写还是小写字母,都能正确匹配switch语句中的case。
字符迭代与计分:
for (char c : lowerCaseWord.toCharArray()) {
int charPoints = 0;
switch (c) {
// ... case statements ...
default:
charPoints = 0;
break;
}
totalWordPoints += charPoints;
}for (char c : lowerCaseWord.toCharArray())循环是核心。它将lowerCaseWord转换为一个字符数组,然后遍历数组中的每一个字符。对于每个字符c,switch (c)语句会根据其值匹配相应的case。
结果输出:
System.out.println(word + " - 得分: " + totalWordPoints + " 分");
在处理完一个单词的所有字符后,打印出原始单词(未转换大小写)及其计算出的总分。
资源关闭:
sc.close();
在文件读取完成后,务必关闭Scanner对象,释放文件资源,避免资源泄露。
通过本教程,我们学习了如何在Java中构建一个文本文件单词字母计分系统。关键在于正确地迭代单词中的每一个字符,并利用switch语句(或Map)根据预设规则为每个字符分配分数,最终累加得出单词的总分。理解并避免原始代码中的常见误区(如switch条件错误、缺少字符迭代和break语句)是实现这一功能的关键。掌握这些技术将有助于你在Java中处理字符串和文件操作相关的各种任务。
以上就是Java编程:实现文本文件单词字母计分系统的详细内容,更多请关注php中文网其它相关文章!
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号