我想创建一个有序数组来研究复杂性。我知道这是一个非常基本的代码。我收到一个错误说......
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at myWork.orderedArray.<init>(orderedArray.java:20)
at myWork.mainClass.main(mainClass.java:6)
我的代码是
package myWork;
public class orderedArray {
int j;
int arr[]=new int[10];
orderedArray(int n){
for(int i=0;i<arr.length;i++){
arr[i]=0;
}
for(int i=0;i<arr.length;i++){
if(arr[i]<=n){
for(int j=arr.length;j>i+1;j--){
arr[j]=arr[j-1];
}
arr[i]=n;
}
}
}
void dispaly(){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
我在主类中创建了一个对象,然后运行了我认为与错误无关的主类
package myWork;
public class mainClass {
public static void main(String[] args) {
orderedArray obj1= new orderedArray(5);
}
}
感谢您抽出宝贵时间阅读本文。如果您在我的英语中发现一些小错误以及我在这个问题中推出代码的方式,请接受我的apoligies(第一次在stackoverflow中,所以我不知道如何正确地提出代码问题:D)
答案 0 :(得分:1)
在第一次迭代:
for(int j=arr.length;j>i+1;j--){
arr[j]=arr[j-1];
}
您将访问超出范围的arr[arr.length]
。您需要从arr.length - 1
开始循环,以确保您永远不会访问无效循环。
答案 1 :(得分:0)
数组索引总是以0开始。
对于例如int a[]=new int[10];
表示第一个索引是[0]最后一个索引是[9]而不是[10]。
从0到9,有10个内存位置,称为阵列长度
例如,通过调用索引超出范围的[10]会引发ArrayoutofboundsException
。
在你的代码中,你在这些方面犯了错误
for(int j=arr.length;j>i+1;j--){
arr[j]=arr[j-1];
}
将arr.length
更改为(arr.length-1)
以摆脱异常
希望这会有所帮助:)