我收到了这个错误。虽然它可能非常基础。 我已经声明了长度为3的数组。为什么它仍然显示OutofBoundException错误?
public static void main(String[] args) {
int i;
String[] arr = new String[3];
Scanner input = new Scanner(System.in);
System.out.println("Please enter the name");
for (i = 0; i < 3; i++) {
arr[i] = input.nextLine();
}
System.out.println(arr[i]);
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at arraysPractice.Arr2.main(Arr2.java:21)
答案 0 :(得分:3)
这是因为在完成for循环后,您的val jdbcDF = sqlContext.read
.format("jdbc")
.option("driver" , "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://<<>Servername>:3306/<<DatabaseName>>")
.option("dbtable", "(SELECT id, name FROM partner) tmp")
.option("user", "username")
.option("password", "******")
.load()
将为3.哪个是outOfBound,因为您的数组大小仅为i
。
所以打印
3
如果你想打印最后一个元素。
注意强>
要避免此类错误,请尝试使用System.out.println(arr[i-1]);
打印最后一个元素。
答案 1 :(得分:0)
循环终止时i
的值为3
。然后,您尝试打印arr[i]
,这将无效,因为它只有索引0
,1
和2
。
我猜你的意思是将System.out.println
语句置于循环中而不是之后?
答案 2 :(得分:0)
第一次迭代)。 I = 0和0 <3因此它进入for循环,然后I ++,所以我= 1
第二次迭代).I = 1和1 <3因此它进入for循环,之后我是++,所以我= 2。
第三次迭代)I = 2和2 <3因此它进入for循环,然后I ++,所以我= 3
第四次迭代)I = 3和3 <3(假)它将退出循环,之后你正在尝试打印。 System.out.println(arr [i]);其中I = 3。并且你的数组大小= 3(意味着最大位置可以是2,其余位置是(0,1,2))所以它是索引越界,因为你想检查索引为3的数组,但是数组最大索引是2。
所以QUICK修复了把System.out.println(arr [i]);在for循环中。