“线程中的异常”;“主要”;java.lang.ArrayIndexOutOfBoundsException:5
运行一个程序后,它将我指向“线程中的异常”;“主要”;java.lang.ArrayIndexOutOfBoundsException:5,java,arrays,Java,Arrays,运行一个程序后,它将我指向If(key.compareTo(a[mid])==0)它有什么问题 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:5 在BinarySearch.search(BinarySearch.java:17)中 main(SearchesDemo.java:23) import java.util.Scanner; 导入java.util.array; 公共类SearchesDemo{ 公共静态void main(
If(key.compareTo(a[mid])==0)
它有什么问题
线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:5
在BinarySearch.search(BinarySearch.java:17)中
main(SearchesDemo.java:23)
import java.util.Scanner;
导入java.util.array;
公共类SearchesDemo{
公共静态void main(字符串[]args){
BinarySearch search=新的BinarySearch();
int结果,键;
整数[]整数数组={0,2,4,6,8,10,12,14,16,18};
String[]stringArray={“苹果”、“橙子”、“桃子”、“草莓”、“西瓜”};
System.out.println(“整数测试数组包含:”);
System.out.println(Arrays.toString(integerArray));
for(键=-3;键==4;键++){
结果=搜索。搜索(整数数组,0,10,键);
搜索.toString(整数.toString(键),结果);
}
System.out.println(“\n字符串测试数组包含:”);
System.out.println(Arrays.toString(stringArray));//可能不需要toString
result=searches.search(stringArray,0,10,“apples”);
搜索。toString(“苹果”,结果);
结果=searches.search(stringArray,0,10,“plums”);
搜索。toString(“李子”,结果);
System.out.println(“\n进程已完成”);
}
}
公共类二进制搜索{
公共静态整数搜索(T[]a,int first,int last,T key){
int result=0;//使编译器满意。
如果(第一个>最后一个)
结果=-1;
否则{
int mid=(第一个+最后一个)/2;
if(key.compareTo(a[mid])==0)
结果=中等;
else if(key.compareTo(a[mid])<0)
结果=搜索(a,first,mid-1,key);
else if(key.compareTo(a[mid])>0)
结果=搜索(a,中间+1,最后一个,键);
否则{
System.out.println(“错误”);
结果=-1;
}
}
返回结果;
}
公共静态void toString(字符串键,int结果){
如果(结果==-1)
System.out.println(数组中没有键+);
其他的
System.out.println(键+”位于索引“+结果);
}
}
不要发送10
上一个值。只需发送数组的长度
result = searches.<String>search(stringArray, 0, stringArray.length, "apples");
searches.toString("apples", result);
result = searches.<String>search(stringArray, 0, stringArray.length, "plums");
searches.toString("plums", result);
result=searches.search(stringArray,0,stringArray.length,“apples”);
搜索。toString(“苹果”,结果);
结果=searches.search(stringArray,0,stringArray.length,“plums”);
搜索。toString(“李子”,结果);
这里也一样:
result = searches.<Integer>search(integerArray, 0, integerArray.length, key);
result=searches.search(integerArray,0,integerArray.length,key);
不要发送10
上一个值。只需发送数组的长度
result = searches.<String>search(stringArray, 0, stringArray.length, "apples");
searches.toString("apples", result);
result = searches.<String>search(stringArray, 0, stringArray.length, "plums");
searches.toString("plums", result);
result=searches.search(stringArray,0,stringArray.length,“apples”);
搜索。toString(“苹果”,结果);
结果=searches.search(stringArray,0,stringArray.length,“plums”);
搜索。toString(“李子”,结果);
这里也一样:
result = searches.<Integer>search(integerArray, 0, integerArray.length, key);
result=searches.search(integerArray,0,integerArray.length,key);
问题是您的stringArray中有5个元素(索引0、1、2、3、4),由于您从0开始索引,最后索引为10,因此介质为5,因此您尝试访问一个不在那里的索引->越界。问题是您的stringArray中有5个元素(索引0、1、2、3、4),由于起始索引为0,最后为10,介质为5,因此您尝试访问不在那里的索引->越界。异常发生在main方法中的行号23。您将开始和结束索引传递为0和10
result = searches.<String>search(stringArray, 0, 10, "apples");
result=searches.search(stringArray,0,10,“apples”);
您的stringarray
的长度只有5。当计算mid时,它变为(0+10)/2
,即5arr[5]
抛出arrayIndexOutOfBound
异常。异常发生在main方法的行号23中。您将开始和结束索引传递为0和10
result = searches.<String>search(stringArray, 0, 10, "apples");
result=searches.search(stringArray,0,10,“apples”);
您的stringarray
的长度只有5。当计算mid时,它变为(0+10)/2
,即5arr[5]
抛出arrayIndexOutOfBound
异常。对0和10的中点的求值为5,但要访问数组的第五个元素,需要[4],因为它从0索引开始。这是一个长度为5的字符串数组,因此(0-4)。对0和10的中点的求值为5,但要访问数组的第五个元素,需要一个[4],因为它从0索引开始。这是一个长度为5的字符串数组,因此是(0-4)。很抱歉,我看到了“SearchesDemo.main(SearchesDemo.java:23)”这一行:“result=searches.search(stringArray,0,10,“apples”);”@FallAndLearn-nope。再次查看代码和异常。它说明了23号线。不幸的是,问题的作者将两个文件的内容放在了同一个代码块中。异常指向类SearchesDemo
到第23行(result=searches.search(stringArray,0,10,“apples”);
)。对不起,我的错误。我看到了另一种情况:)对不起,但我看到了“SearchesDemo.main(SearchesDemo.java:23)”这行:“result=searches.search(stringArray,0,10,“apples”);“@FallAndLearn-nope。再次查看代码和异常。它说明了23号线。不幸的是,问题的作者将两个文件的内容放在了同一个代码块中。异常指向类SearchesDemo
到第23行(result=searches.search(stringArray,0,10,“apples”);
)。对不起,我的错误。我看到了另一种情况:)