Java数组下标越界

源代码如下:packageTest;publicclassArreyTest{publicstaticvoidmain(String[]args){int[]aaa={2... 源代码如下:
package Test;
public class ArreyTest {
public static void main(String[] args) {
int[] aaa={23,14,35,2,71,55,82,41,11,6};
Ary ay1=new Ary(aaa);
ay1.print();
ay1.order();
ay1.print();
for(int m=0;m<aaa.length;m++)System.out.print("---"+aaa[m]);
System.out.println();
Ary ay2=new Ary(ay1.subAry(2,6));
ay2.print();
}
}
class Ary{
int[] m_ary;
Ary(int[] p)
{m_ary=p;}
void print()
{
for(int i=0;i<m_ary.length;i++)
System.out.print(m_ary[i]+" ");
System.out.println();
}
void order()
{
int j,temp;
boolean exchange=true;
j=m_ary.length-2;
while(j>=0&&exchange)
{
exchange=false;
for(int i=0;i<=j;i++)
if(m_ary[i]>m_ary[i+1])
{
exchange=true;
temp=m_ary[i];
m_ary[i]=m_ary[i+1];
m_ary[i+1]=temp;

}
j=j-1;
}
}
int[] subAry(int a1,int a2){
int[] sa;
if(a1>=0&&a1<a2&&a2<m_ary.length){
sa=new int[a2-a1+1];
for(int i=0,j=a1;i<=a2;i++,j++)sa[i]=m_ary[j];
return sa;

}
else
{
System.out.println("error index");
return new int[1];
}
}
}

运行结果如下:
23 14 35 2 71 55 82 41 11 6
2 6 11 14 23 35 41 55 71 82
---2---6---11---14---23---35---41---55---71---82
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Test.Ary.subAry(ArreyTest.java:49)
at Test.ArreyTest.main(ArreyTest.java:11)
知道是下标越界,但不知道哪里错,求高手,求解释.好的话,我再加分.
展开
 我来答
flyingFish211
2011-03-14 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.1亿
展开全部
i < a2出错,修改如下:
if (a1 >= 0 && a1 < a2 && a2 < m_ary.length) {
sa = new int[a2 - a1 + 1];//2 到6是5个元素
for (int i = 0, j = a1; i < a2-1; i++, j++)
sa[i] = m_ary[j];//a2=6,所以i< a2-1才可以

完整代码
package Test;

public class ArreyTest {
public static void main(String[] args) {
int[] aaa = { 23, 14, 35, 2, 71, 55, 82, 41, 11, 6 };
Ary ay1 = new Ary(aaa);
ay1.print();
ay1.order();
ay1.print();
for (int m = 0; m < aaa.length; m++)
System.out.print("---" + aaa[m]);
System.out.println();
Ary ay2 = new Ary(ay1.subAry(2, 6));
ay2.print();
}
}

class Ary {
int[] m_ary;

Ary(int[] p) {
m_ary = p;
}

void print() {
for (int i = 0; i < m_ary.length; i++)
System.out.print(m_ary[i] + " ");
System.out.println();
}

void order() {
int j, temp;
boolean exchange = true;
j = m_ary.length - 2;
while (j >= 0 && exchange) {
exchange = false;
for (int i = 0; i <= j; i++)
if (m_ary[i] > m_ary[i + 1]) {
exchange = true;
temp = m_ary[i];
m_ary[i] = m_ary[i + 1];
m_ary[i + 1] = temp;

}
j = j - 1;
}
}

int[] subAry(int a1, int a2) {
int[] sa;
if (a1 >= 0 && a1 < a2 && a2 < m_ary.length) {
sa = new int[a2 - a1 + 1];//2 到6是5个元素
for (int i = 0, j = a1; i < a2-1; i++, j++)
sa[i] = m_ary[j];//a2=6,所以i< a2-1才可以
return sa;

} else {
System.out.println("error index");
return new int[1];
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ThinkIBM
2011-03-14 · TA获得超过5289个赞
知道大有可为答主
回答量:3263
采纳率:0%
帮助的人:5475万
展开全部
没细看你的代码,不过肯定是49行这一句出错,改成这样:
for(int i=0,j=a1;i<=a2&&i<sa.length&&j<m_ary.length;i++,j++)sa[i]=m_ary[j];
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a138069
2011-03-14 · 超过13用户采纳过TA的回答
知道答主
回答量:132
采纳率:0%
帮助的人:33.5万
展开全部
你是想搞冒泡排序吧!你看下你这句代码: Ary ay2=new Ary(ay1.subAry(2,6));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式