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,越界! }
解决办法:调整循环索引逻辑
有两种正确的写法可以选择:
- 循环变量从0开始,显示序号时加1:
for (int i = 0; i < NUM_PLAYERS; i++) { System.out.print("请输入第" + (i + 1) + "位玩家的姓名:"); players[i] = scanner.next(); }
- 循环变量从1开始,数组索引用
i-1:
for (int i = 1; i <= NUM_PLAYERS; i++) { System.out.print("请输入第" + i + "位玩家的姓名:"); players[i - 1] = scanner.next(); }
总结排查步骤
- 先打印NUM_PLAYERS的值,确认它是你预期的正整数;
- 检查循环的索引逻辑,确保没有超出数组的有效范围(0到NUM_PLAYERS-1)。
按照上面的方法调整后,应该就能解决这个越界问题了!
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

