You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();
    }
}

代码逻辑说明

  1. 外层while循环:控制程序持续运行,直到输入"exit"
  2. 输入处理:用for循环接收3个单词,每输入一个立即检查是否为"exit",是则终止当前轮次并退出程序
  3. 重复/不同数量统计:
    • 用嵌套for循环逐个比较单词,找到重复项时增加重复计数,并标记已统计的重复单词避免重复计算
    • 通过uniqueCount统计未被标记为重复的单词数量,得到不同单词的个数
  4. 无越界风险:所有数组访问的下标都在0到2之间(数组长度为3),不会出现下标越界

其他思路(仍基于基础知识点)

如果不想用嵌套循环,也可以用while循环实现统计:

  • 先取出第一个单词,用while循环遍历剩余单词,统计重复次数
  • 再取出第二个未重复的单词,继续遍历剩余单词统计,以此类推

内容的提问来源于stack exchange,提问作者gamlas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:02:46