Java方法学习遇Index Out of Bounds错误,求原因及解决
问题分析与解决
错误根源
你碰到的Index X out of bounds for length X异常,问题出在stars方法的最后一行:return star[num];。
Java数组的索引从0开始,长度为num的数组,有效索引范围是0到num-1。你创建的star数组长度是num,star[num]直接访问了超出数组范围的位置,这必然触发数组越界异常。
另外你的代码逻辑存在冗余:stars方法内部已经通过System.out.print打印了星号,而main方法又调用System.out.println(stars(num)),会导致星号被重复输出,同时还会尝试打印越界访问得到的错误值。
解决方案
重构stars方法,让它专注于生成由num个星号组成的字符串,而非直接打印,这样逻辑更清晰,也能彻底解决越界问题。
优化后的完整代码
import java.util.Scanner; public class TaskMethods { public static void main (String[] args){ System.out.println("Insert number of stars:"); int num = getInt(); // 打印方法返回的星号字符串 System.out.println(stars(num)); } public static int getInt(){ return new Scanner(System.in).nextInt(); } // 生成并返回num个星号组成的字符串 public static String stars(int num){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < num; i++){ sb.append("*"); } return sb.toString(); } }
如果你坚持使用数组实现
可以将数组元素拼接成完整字符串返回,避免越界访问:
public static String stars(int num){ String[] star = new String[num]; for (int i = 0; i < star.length; i++){ star[i] = "*"; } // 将数组中所有星号拼接成一个字符串返回 return String.join("", star); }
关键提醒
数组索引越界问题大多出在循环结束后的访问或者边界条件判断错误,下次排查时可以重点检查循环外的数组操作,以及索引值是否等于数组长度(这是最常见的越界场景)。
内容的提问来源于stack exchange,提问作者Adix
相关产品推荐
相关产品推荐

