java程序出错了,java.lang.ArrayIndexOutOfBoundsException: -1

要实现的功能就是将ArrayList表里面所有以给定开头的数据都列出来importjava.util.ArrayList;publicclasstest_project{... 要实现的功能就是将ArrayList表里面所有以给定开头的数据都列出来

import java.util.ArrayList;
public class test_project {
public static void main(String[] args) {
ArrayList<String> a=new ArrayList();
a.add("aabbc");
a.add("aabbcda");
a.add("aabbdg");
a.add("aabbfh");
a.add("aabbdsfh");
a.add("aabbsfdhg");
search s=new search();
int[] ed=new int[2];
ed=s.search(a, "aa");
}
}

public class compare {//这个类完全正确//

public int compare(String a,String b){
char[] a1=new char[a.length()+1];
a1=a.toLowerCase().toCharArray();
char[] b1=new char[b.length()+1];
b1=b.toLowerCase().toCharArray();
int num=Math.min(a.length(),b.length());
int c=0;
for(int i=0;i<=num-1;i++)
{if(a1[i]<b1[i])
{c=-1;break;}
else if(a1[i]>b1[i])
{c=1;break;}
else{continue;}}
return c;
}}

import java.util.ArrayList;

public class search {
int middle;
public int[] search(ArrayList<String> sorted,String key){
int low=0;
int size=sorted.size();
int high=size-1;
int[] aa=new int[2];
compare c=new compare();
while(low<=high)
{
if(low>high){System.out.println("error");break;}
else{int mid=(int)(low+high)/2;
if(c.compare(key,sorted.get(mid))==0){
this.middle=mid;
break;}
else if(c.compare(key,sorted.get(mid))==-1){
high=mid-1;}
else{low=mid+1;}
}}
for(int down=1;down<=size;)
{
if((c.compare(key,sorted.get(this.middle-down)))==0){
down=down+1;}
else{aa[0]=(middle-down+1);break;}

}
for(int up=1;up<=size;)
{
if(c.compare(key,sorted.get(this.middle+up))==0){
up=up+1;}
else{aa[1]=(middle+up-1);break;}

}
return aa;
}}
展开
 我来答
匿名用户
2015-01-22
展开全部
在for(int down=1;down<=size;) 这个地方,size为你List 的大小,而sorted.get(this.middle-down),这里的middle是size的一半,遍历的时候this.middle-down可能小于0,所以会出现数组越界,判断一下this.middle-down的大小就行;同理,你sorted.get(this.middle+up)这个地方也有可能大于sort的大小,先判断
bing_nuo
2015-01-22 · TA获得超过784个赞
知道小有建树答主
回答量:1040
采纳率:50%
帮助的人:756万
展开全部
数组设大一些,2小了,已经越界了
追问
我的数组只需要存放两个元素,一个up一个down。感觉问题是处在sorted这里
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式