提问人:Adix 提问时间:6/12/2023 更新时间:6/13/2023 访问量:113
索引 X 超出长度 X 的边界 [重复]
Index X out of bounds for length X [duplicate]
问:
我正在学习 Java,在学习方法时遇到了一个错误。更重要的是,代码可以做我想要的,(它显示星星),但它也会抛出错误。我不太清楚为什么。
以下是代码和错误:
import java.util.Scanner;
public class TaskMethods {
//Display the stars
public static void main (String[] args){
System.out.println("Insert number of stars:");
//declare numbers of stars
int num = getInt();
//Display the stars by 'stars' method
System.out.println(stars(num));
}
//method for input int variables
public static int getInt(){
return new Scanner(System.in).nextInt();
}
//method for inputing stars to array and also for displaying them.
public static String stars(int num){
String[] star = new String[num];
for (int i = 0; i < star.length; i++){
star[i] = "*";
System.out.print(star[i]);
}
return star[num];
}
}
我试图按数组长度限制循环(像往常一样),但没什么。 没有一行我们声明数组范围之外的值。 在我看到的每篇文章中,问题都是错误的范围。
这就是我在这里寻求帮助的原因。
答:
0赞
Pol
6/12/2023
#1
假设您的数组长度为 3。您将在 star[0]、star[1] 和 star[2] 处拥有星星。 在 stars 方法中,你返回 star[3],而这并不存在。
0赞
Reilas
6/12/2023
#2
您正在尝试访问 star[num],它将是最后一个索引值之外的 1。
return star[num];
此外,您还在此处向 println 调用提供 stars 方法的返回值。
//Display the stars by 'stars' method
System.out.println(stars(num));
这不是必需的,因为星星使用打印来显示值。
您可以采取两种方法。
第一,只需调用 stars(num),无需 println 调用。
这还允许您删除星形的返回类型 - 通过将其更改为 void。
//method for inputing stars to array and also for displaying them.
public static void stars(int num){
String[] star = new String[num];
for (int i = 0; i < star.length; i++){
star[i] = "*";
System.out.print(star[i]);
}
}
或者,您可以在星形中填充一个 String 值,然后返回该值。
public static String stars(int num){
String[] star = new String[num];
String string = "";
for (int i = 0; i < star.length; i++){
star[i] = "*";
string += star[i];
}
return string;
}
随后,您可以在 for 循环中减少 string 和 star[i] 赋值。
string += star[i] = "*";
而且,由于我们讨论的主题是,您可以利用 Arrays#fill 方法来填充数组,并使用 String#join 方法来连接值。
public static String stars(int num){
String[] star = new String[num];
Arrays.fill(star, "*");
return String.join("", star);
}
此外,String#repeat 方法可以生成重复字符序列。
public static String stars(int num){
return "*".repeat(num);
}
下面是一个示例输入和输出。
Insert number of stars:
5
*****
评论
[0...num)
num
i
stars
i < stars.length
star[num]
return star[num];