大家好,我在夏天学习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;
}
}
答案 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++)