Java中如何计算输入字符串的有效单词占比?求技术指导
Java新手有效单词占比计算问题的修复建议
原代码核心问题
- 未将合法输入存入数组,也未统计有效单词数量,无法计算占比
- 输入校验循环中,输入不合法时未将
valid设为false,循环逻辑失效 - 百分比计算部分完全未实现,存在语法错误
- 未统计首字母大写的单词数量
修复后的完整代码
import java.util.Scanner; public class Subject3 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); boolean valid = true; int numOfStrings = 0; // 获取合法的字符串数量 do { valid = true; System.out.print("请输入字符串数量: "); try { numOfStrings = Integer.parseInt(scan.nextLine()); // 校验数量为正整数 if (numOfStrings <= 0) { System.out.println("请输入大于0的整数"); valid = false; } } catch (NumberFormatException e) { System.out.println("输入不是有效整数,请重新输入"); valid = false; } } while (!valid); String[] stringPali = new String[numOfStrings]; int validCount = 0; int capitalStartCount = 0; // 逐个输入字符串并校验 for (int i = 0; i < numOfStrings; i++) { do { valid = true; System.out.print("请输入第" + (i + 1) + "个字符串: "); String input = scan.nextLine(); // 校验是否为仅含字母数字的有效单词 if (!input.matches("[A-Za-z0-9]+")) { System.out.println("输入不是有效单词(仅允许字母和数字),请重新输入"); valid = false; } else { // 存入数组 stringPali[i] = input; validCount++; // 统计首字母大写的单词 if (Character.isUpperCase(input.charAt(0))) { capitalStartCount++; } } } while (!valid); } // 计算百分比并输出结果 System.out.println("\n结果统计"); System.out.println("总输入字符串数量: " + numOfStrings); double validPercentage = (double) validCount / numOfStrings * 100; double capitalPercentage = (double) capitalStartCount / numOfStrings * 100; System.out.printf("有效单词占比: %.2f%%\n", validPercentage); System.out.printf("首字母大写的单词占比: %.2f%%\n", capitalPercentage); scan.close(); } }
关键修复说明
- 有效数量统计:新增
validCount变量,每存入一个合法单词就累加,用于后续占比计算 - 循环逻辑修正:输入不合法时将
valid设为false,确保循环持续提示输入 - 首字母大写统计:用
Character.isUpperCase()判断首字母,累加capitalStartCount - 百分比计算:通过强制类型转换为
double避免整数除法丢失精度,用printf格式化输出百分比 - 额外校验:增加字符串数量必须为正整数的校验,避免无效输入
- 资源管理:最后关闭Scanner对象,养成良好的资源使用习惯
内容的提问来源于stack exchange,提问作者Konmich
相关产品推荐
相关产品推荐

