-1

大家好,我整个夏天都在学习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

4 回答 4

5

此行将抛出越界异常。

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

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

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

这样您就可以在经过最后一个索引 ( farray.length - 1) 之前停止循环。

于 2013-08-06T17:59:50.107 回答
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++)
于 2013-08-06T18:03:46.480 回答
0

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

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

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

于 2013-08-06T18:03:49.733 回答
0

数组的索引总是从零开始并以长度 1 结束

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

您的终止条件是错误的。它试图访问位于索引长度的元素,该元素不存在,因此您会遇到异常。应将其修改为如下所示以使其工作:

for(i=0; i < farray.length; i++)
于 2013-08-06T18:04:51.807 回答