Java入门练习:如何检查数组重复单词并统计?求解决越界问题
解决输入三单词统计重复/不同数量的问题(含数组越界修复)
原代码的核心问题
- 数组越界:else分支中执行
i=position(position初始为0),导致i被重置为0,后续访问names[i-1]等价于访问names[-1],触发数组下标越界异常 - 循环逻辑混乱:do-while循环中position变量从未更新,会陷入无限循环;index变量的计数逻辑错误,无法正确统计重复次数
- 输入处理不严谨:未在每次输入后立即检查"exit",且重复输入提示逻辑冗余
基于你已掌握知识的修正方案
以下代码仅使用if/else、for/while循环、数组和Scanner实现需求,逻辑清晰且避免越界问题:
import java.util.Scanner; public class WordCounter { public static void main(String[] args) { Scanner lector = new Scanner(System.in); // 外层while循环:持续运行直到输入exit while (true) { String[] names = new String[3]; boolean shouldExit = false; // 输入3个单词,同时检查exit for (int i = 0; i < names.length; i++) { if (i == 0) { System.out.println("User, give me name"); } else { System.out.println("Give me another name"); } String input = lector.nextLine(); // 输入exit则标记终止,跳出输入循环 if (input.equals("exit")) { shouldExit = true; break; } names[i] = input; } // 触发exit则终止整个程序 if (shouldExit) { break; } // 统计重复单词数量 int repeatCount = 0; // 统计不同单词数量 int uniqueCount = 0; // 用一个数组标记已统计过的单词,避免重复计数 boolean[] counted = new boolean[3]; // 遍历每个单词,统计不同数量 for (int i = 0; i < names.length; i++) { if (!counted[i]) { uniqueCount++; // 检查后续单词是否重复 for (int j = i + 1; j < names.length; j++) { if (names[i].equals(names[j])) { repeatCount++; counted[j] = true; // 标记该重复单词已统计 } } } } // 输出结果 System.out.println("重复单词的数量: " + repeatCount); System.out.println("不同单词的数量: " + uniqueCount); System.out.println("----------"); } lector.close(); } }
代码逻辑说明
- 外层while循环:控制程序持续运行,直到输入"exit"
- 输入处理:用for循环接收3个单词,每输入一个立即检查是否为"exit",是则终止当前轮次并退出程序
- 重复/不同数量统计:
- 用嵌套for循环逐个比较单词,找到重复项时增加重复计数,并标记已统计的重复单词避免重复计算
- 通过
uniqueCount统计未被标记为重复的单词数量,得到不同单词的个数
- 无越界风险:所有数组访问的下标都在
0到2之间(数组长度为3),不会出现下标越界
其他思路(仍基于基础知识点)
如果不想用嵌套循环,也可以用while循环实现统计:
- 先取出第一个单词,用while循环遍历剩余单词,统计重复次数
- 再取出第二个未重复的单词,继续遍历剩余单词统计,以此类推
内容的提问来源于stack exchange,提问作者gamlas
相关产品推荐
相关产品推荐

