如何停止“ArrayIndexOutOfBounds”异常

时间:2013-08-06 17:58:15

标签: java arrays indexoutofboundsexception

大家好,我在夏天学习java,这是最后的任务,我被困住了。该程序应该输入我输入的13个数字,对它们进行排序,然后找到我在原始数组中输入的最大数字的索引号。我试图看看我的选择方法是否有效,但每当我尝试输入数字时,我都会得到一个超出范围的错误。这有点令人沮丧,我一直试图找到并回答几个小时。任何帮助将不胜感激。谢谢!

import java.util.Scanner;
public class fmax
{
  public static void main(String[] args)
  {
    int indmax;
    int[] fmax = new int[13];
    fillmax(fmax);
    //System.out.println(fmax);
    indmax = maxfmax(fmax);
    //indmin = minfmax();
    System.out.println(indmax);
  }

  public static void fillmax(int[] farray)
  {
    Scanner sc = new Scanner(System.in);
    int i = 0;
    for(i = 0; i < farray.length; i++)
    {
      farray[i] = sc.nextInt();
    }
   }

    public static int maxfmax(int[] farray)
    {
      int[] copy = farray;
      int j, x=0, i;
      boolean flag = true;
      int temp;

      while(flag)
      {
        flag = false;
        for( j = 0; j < copy.length -1; j++)
        {
          if(copy[j] < copy[j+1])
          {
            temp = copy[j];
            copy[j] = copy[j+1];
            copy[j+1] = temp;
            flag = true;
          }
         }

        for(i=0; i <= farray.length; i++)
        {
         if(farray[i] == copy[1])
           x = i;
        }
      }
       return x;
    }
 }

4 个答案:

答案 0 :(得分:5)

此行将抛出越界异常。

for(i=0; i <= farray.length; i++)

您的终止条件不正确。试试这个:

for(i=0; i < farray.length; i++)

以便在超过最后一个索引(farray.length - 1)之前停止循环。

答案 1 :(得分:0)

您将数组的长度定义为13,而不是运行此行:

for(i=0; i <= farray.length; i++)

这意味着您将选择不存在的项fmax[13],因为java从0开始计数。因此最高的索引是fmax[12]。你需要改变你的状况:

for(i=0; i < farray.length; i++)

for(i=0; i <= farray.length -1; i++)

答案 2 :(得分:0)

在这种情况下,length array返回数组的大小 - 但它从1开始而不是零。

i <= farray.length   - causes out of bounds exception

你必须使用 - 正如你在for循环中提到的i < farray.length

答案 3 :(得分:0)

数组始终具有从零开始并以length-1

结尾的索引
for(i=0; i <= farray.length; i++)

您的终止条件有误。它正在尝试访问位于索引长度的元素,该元素不存在,因此您将获得异常。应将其修改为类似下面的内容以使其正常工作:

for(i=0; i < farray.length; i++)