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

Java中能否用变量设置数组长度?高尔夫计分卡应用遇数组越界问题

解决高尔夫计分卡应用的数组越界问题

兄弟,你这个数组越界的问题我太熟了,大概率是踩了这两个常见的坑之一,咱们一步步来排查和解决:

可能的原因1:NUM_PLAYERS的实际值不符合预期

你想用用户输入的玩家数量定义数组长度,但如果NUM_PLAYERS的值是0或者负数,那初始化的数组长度就是0,这时候哪怕是第一个录入操作(访问索引0)都会触发越界异常。

这种情况通常是因为你没有正确处理用户输入:比如用户输入了非整数、或者输入了0/负数,而你没有做验证就直接赋值给NUM_PLAYERS了。

解决办法:添加输入验证逻辑

确保NUM_PLAYERS是正整数后再初始化数组,示例代码如下:

import java.util.Scanner;

public class GolfScorecard {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int NUM_PLAYERS = 0;

        // 循环直到用户输入有效的正整数
        while (NUM_PLAYERS <= 0) {
            System.out.print("请输入玩家数量(必须大于0):");
            if (scanner.hasNextInt()) {
                NUM_PLAYERS = scanner.nextInt();
                if (NUM_PLAYERS <= 0) {
                    System.out.println("玩家数量必须大于0,请重新输入!");
                }
            } else {
                System.out.println("请输入有效的整数!");
                scanner.next(); // 清除无效的非整数输入
            }
        }

        // 现在初始化数组就不会有长度为0的问题了
        String[] players = new String[NUM_PLAYERS];

        // 接下来录入玩家姓名...
    }
}

可能的原因2:循环索引使用错误(从1开始而非0)

Java数组的索引是从0开始的,如果你写的循环是从1开始计数,直接用循环变量作为数组索引,就会在第一次录入时触发越界。

比如错误的循环写法:

// 错误示例:i从1开始,直接访问players[i]
for (int i = 1; i <= NUM_PLAYERS; i++) {
    System.out.print("请输入第" + i + "位玩家的姓名:");
    players[i] = scanner.next(); // 当i=1时,数组最大索引是NUM_PLAYERS-1,越界!
}

解决办法:调整循环索引逻辑

有两种正确的写法可以选择:

  1. 循环变量从0开始,显示序号时加1:
for (int i = 0; i < NUM_PLAYERS; i++) {
    System.out.print("请输入第" + (i + 1) + "位玩家的姓名:");
    players[i] = scanner.next();
}
  1. 循环变量从1开始,数组索引用i-1:
for (int i = 1; i <= NUM_PLAYERS; i++) {
    System.out.print("请输入第" + i + "位玩家的姓名:");
    players[i - 1] = scanner.next();
}

总结排查步骤

  1. 先打印NUM_PLAYERS的值,确认它是你预期的正整数;
  2. 检查循环的索引逻辑,确保没有超出数组的有效范围(0到NUM_PLAYERS-1)。

按照上面的方法调整后,应该就能解决这个越界问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:08:37