Topic: 问题在哪里!(ArrayIndexOutOfBoundsException)

  Print this page

1.问题在哪里!(ArrayIndexOutOfBoundsException) Copy to clipboard
Posted by: fossil
Posted on: 2005-08-23 19:09

Please use the [ code ] tag for source code.

请尽量使用准确的文字描述作为标题
Your next post without a proper Subject will be removed.

Original subject :
大家帮我看看我的问题在哪里!


import java.io.*;
public class max
{
  public static void main(String[] args)
  {
  int[] test=new int[5];
  
  int max;
  max=0;
  int index=0;
  
  while (index<test.length)
  {
  
  System.out.print("请输入第"+(index+1)+"个数");
  
  try{
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String inputLine=in.readLine();
    test[index] = Integer.valueOf(inputLine).intValue();
  }
  
  catch(Exception exc){
    System.out.println("输入的数字不合法");
    continue;
    }
index=index+1;
  }
  
  max=test[0];
  
  System.out.println(test[0]);
  
  for (int i=0;i<test.length ;i++ )
  {
  if (test[i]>=test[i+1])
    max=test[i];
  }
  
  System.out.println("最大数为"+max);
  }
}


最后输完5个数后出来:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at max.main(max.java:36)
好像是数组的长度问题!但我不会!大家帮帮忙!

2.Re:大家帮我看看我的问题在哪里! [Re: fossil] Copy to clipboard
Posted by: truthawp
Posted on: 2005-08-23 20:50


for (int i=0;i<test.length ;i++ )
{
if (test[i]>=test[i+1])
max=test[i];
}

这里有点问题了,楼主想的不错,应该是数组长度的问题;由于是i<test.length,而且楼主的if语句这样写的话最后就会比较test[4]和test[5]了,而test[5]下标已经益出,所以就有问题了,其实改的方法很多,这里我就这样改下for语句
for (int i=0;i<test.length-1 ;i++ )就可以了
还有if这么写可能会有问题的(无法正确获得最大的数)
这样应该就没问题了

max=test[0];
System.out.println(test[0]);
for (int i=0;i<test.length-1 ;i++ )
{
if (test[i]<=test[i+1])
max=test[i+1];
}
Smile

3.Re:问题在哪里!(ArrayIndexOutOfBoundsException) [Re: fossil] Copy to clipboard
Posted by: fossil
Posted on: 2005-08-24 10:18

非常感谢!以前在C语言中好像不存在这个问题!谢谢!

4.Re:问题在哪里!(ArrayIndexOutOfBoundsException) [Re: fossil] Copy to clipboard
Posted by: why
Posted on: 2005-08-24 11:22

fossil wrote:
非常感谢!以前在C语言中好像不存在这个问题!谢谢!

This is only because it doesn't check array bound.

5.Re:大家帮我看看我的问题在哪里! [Re: truthawp] Copy to clipboard
Posted by: CunningFox
Posted on: 2005-09-23 14:05

truthawp wrote:

for (int i=0;i<test.length ;i++ )
{
if (test[i]>=test[i+1])
max=test[i];
}

这里有点问题了,楼主想的不错,应该是数组长度的问题;由于是i<test.length,而且楼主的if语句这样写的话最后就会比较test[4]和test[5]了,而test[5]下标已经益出,所以就有问题了,其实改的方法很多,这里我就这样改下for语句
for (int i=0;i<test.length-1 ;i++ )就可以了
还有if这么写可能会有问题的(无法正确获得最大的数)
这样应该就没问题了

max=test[0];
System.out.println(test[0]);
for (int i=0;i<test.length-1 ;i++ )
{
if (test[i]<=test[i+1])
max=test[i+1];
}
Smile


数组长度问题是解决了,但是这种方法找不出最大值,如1,9,1,6,7
我改了一下:
max=test[0];
System.out.println(test[0]);
for (int i=0;i<test.length ;i++ ){
  if (max<test[i])
  max=test[i];
}
System.out.println("最大数为"+max);  
}

6.Re:问题在哪里!(ArrayIndexOutOfBoundsException) [Re: fossil] Copy to clipboard
Posted by: fly135
Posted on: 2005-09-23 18:24

CunningFox
说得对,我说怎么这么别扭


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923