英文:
Index X out of bounds for length X
问题
I'm learning Java and while learning methods I came across an error. What's more, code does what I want, (it displays stars), but it also throws an error. I don't quite know why.
Here is code and error below:
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 inputting stars to an 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 - 1];
}
}
I tried to limit the loop by the array length (like always) and It's nothing. There is no line where we declare values outside the range of the array. In every post I've seen the problem was wrong range.
That's why I'm looking for help here.
英文:
I'm learning Java and while learning methods I came across an error. What's more, code does what I want, (it displays stars), but it also throws an error. I don't quite know why.
Here is code and error below:
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];
}
}
I tried to limit the loop by the array lenght (like always) and It's nothing.
There is no line where we declare values outside the range of the array.
In every post I've seen the problem was wrong range.
Thats why I'm looking for help here.
答案1
得分: 0
你的数组长度为3。你会在star[0]、star[1]和star[2]的位置有星星。
在stars方法中,你返回了star[3],但这个位置不存在。
英文:
Say your array is 3 of length. You will have stars at star[0], star[1], and star[2].
In the stars method, you return star[3] and this doesn't exist.
答案2
得分: 0
以下是您要翻译的部分:
你正在尝试访问_star[num]_,这将在最后一个索引值之外为1。
return star[num];
此外,您正在将_stars_方法的返回值提供给_println_调用,如下所示。
//通过“stars”方法显示星号
System.out.println(stars(num));
这是不必要的,因为_stars_使用_print_来显示值。
您可以采取两种方法之一。
一种方法是只调用_stars(num),而不调用_println。这也允许您将_stars_的返回类型更改为_void_。
//用于输入星号到数组并显示它们的方法。
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]);
}
}
或者,您可以在_stars_内部填充一个_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-loop_内减少_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);
}
以下是一个示例输入和输出。
插入星号数量:
5
*****
英文:
You're attempting to access star[num], which would be 1 outside the last indexed value.
return star[num];
Additionally, you are supplying the return value of the stars method, to a println call, here.
//Display the stars by 'stars' method
System.out.println(stars(num));
Which, isn't necessary, since stars uses print to display the value.
There are two approaches you can take.
One, simply call stars(num), without the println call.
This would also allow you to remove the return type of stars—by changing it to 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]);
}
}
Or, you can populate a String value within stars, and return that.
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;
}
Subsequently, you can reduce the string and star[i] assignment, within the for-loop.
string += star[i] = "*";
And, since we're on the topic, you can utilize the Arrays#fill method, to populate an array, and the String#join method to concatenate the values.
public static String stars(int num){
String[] star = new String[num];
Arrays.fill(star, "*");
return String.join("", star);
}
Furthermore, the String#repeat method, can produce a sequence of repeating characters.
public static String stars(int num){
return "*".repeat(num);
}
Here is an example input and output.
Insert number of stars:
5
*****
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论