我是Java编程的新手,但在浏览了这个网站后,我相当确定这应该可行。
public static int[] ArrayStringToArrayInt(String[] arrayString) {
int[] arrayInt = new int[arrayString.length]; //Array of Ints for output
for (int i = 0; i <= arrayString.length; i++ ) { //Run through the
arrayInt[i] = Integer.parseInt(arrayString[i]); //array, Parsing each
} //item into an int
return arrayInt;
}
我想要这个方法做的是获取一个输入数组:["1","2","3"],每个项都是一个字符串并返回[1,2,3],其中每个项目都是一个整数
我用这个代码调用方法
int[] toBeSorted = ArrayStringToArrayInt(inputStringArray);
在这种情况下,toBeSorted在这里被声明,同时被初始化。
每当我尝试运行这个时,我都会得到以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at sorter.Sorter.ArrayStringToArrayInt(Sorter.java:31)
at sorter.Sorter.main(Sorter.java:22)
Java Result: 1
第31行是我的For循环的主体,它是进行解析的部分,第22行是调用该方法的地方。
我需要这个的原因是,我试图使用Scanner类从用户那里获得输入,并希望他们能够同时输入许多数字。然后,我使用分隔符模式将输入转换为数组。虽然这看起来很好,但我只能弄清楚如何使输入成为字符串数组,而不是int,这是我的问题。
所以我想我要问的是1) 为什么我的代码不起作用?和2) 有没有比这更容易的方法从用户那里获取输入并将其转换为int数组?
对于那些想看到我的整个代码的人,这里是
中间的测试变量和两个数字的相加只是我测试代码的一种方式,看看它是否有效。它应该显示将您输入的列表中的前两个数字相加的结果
package sorter;
import java.util.Scanner;
import java.util.Arrays;
public class Sorter {
public static void main(String[] args) {
Scanner userInput = new Scanner( System.in );
System.out.println("Enter a list to be sorted, seperate numbers by commas:");
String input = userInput.nextLine(); //Gets aan input as a String
String delims = "[,]+"; //Use Comma as Delimiter
String[] inputStringArray = input.split(delims); //Parse String and creates
//an array
System.out.println(Arrays.toString(inputStringArray)); //Outputs a string of
//the given array
int[] toBeSorted = ArrayStringToArrayInt(inputStringArray);
int test = toBeSorted[0] + toBeSorted[1];
System.out.println(test);
}
public static int[] ArrayStringToArrayInt(String[] arrayString) {
int[] arrayInt = new int[arrayString.length]; //Array of Ints for output
for (int i = 0; i <= arrayString.length; i++ ) { //Run through the
arrayInt[i] = Integer.parseInt(arrayString[i]); //array, Parsing each
} //item into an int
return arrayInt;
}
}
循环的范围错误:
for (int i = 0; i <= arrayString.length; i++ )
应该是
for (int i = 0; i < arrayString.length; i++ )
数组的有效索引介于0和arrayString.length - 1
之间。
作为奖励,这里有一个更好的方法来实现Java 8:
public static int[] ArrayStringToArrayInt(String[] arrayString)
{
return Stream.of(arrayString).mapToInt(Integer::parseInt).toArray();
}
此处一个错误关闭:
for (int i = 0; i <= arrayString.length; i++ ) {
^
应该是:
for (int i = 0; i < arrayString.length; i++ ) {
这是错误的
for (int i = 0; i <= arrayString.length; i++ )
应该是
for (int i = 0; i < arrayString.length; i++ )
数组的索引在0和长度-1 之间
变量i
应从0
变为N-1
,N
是数组的长度。Java数组,就像C数组一样,是基于零的,这意味着您应该将它们从0
迭代到N-1
。所以你的for
应该是这样的:
for (int i = 0; i < arrayString.length; i++)
您可以使用流:
Arrays.stream(arrayString).mapToInt(Integer::parseInt).toArray()
只需更改此语句
用于(int i=0;i<=arrayString.length;i++)
到
用于(int i=0;i<arrayString.length;i++)
它会很好用的。ArrayIndexOutOfBoundsException表示您试图访问数组中不存在的索引。例如,
int[]a=新的int[5];
那么我可以使用的索引是
a[0]、a[1]、a[2]、a[3]和a[4]
我无法访问
a[5]
如果我尝试,我会得到ArrayIndexOutOfBoundsException。
这意味着数组索引从0开始,一直到数组长度-1。
希望这能有所帮助。