数组返回值

时间:2014-09-23 08:19:15

标签: java arrays methods return-value

.txt文件包含以下值:

10

40

30

5

18

此代码用于读取.txt文件中的数字,然后保存到数组中。然后使用方法查找最大数字并返回值。 我在运行它时遇到错误。我做错了什么?

import java.io.File;
import java.util.Scanner;

public class MinOppgave4 {
public static void main(String[]args)throws Exception{

    String fileName = "MinOppgave4tekst.txt";
    File mineFile = new File(fileName);
    Scanner in = new Scanner(mineFile);
    int[] num = new int [5];

    for(int i=0; i<num.length; i++)
    {
        num[i]=in.nextInt();
        System.out.println(num[i]);
    }

    System.out.println("The biggest number is: "+GetTheBiggestNum(num));
}


public static int GetTheBiggestNum(int[] num)
{
    int biggestNum = 0;
    if ((num[0] > num[1]) && (num[0] > num[2]) && (num[0] > num[3]) && (num[0] > num[4]) && (num[0] > num[5]))
    {
        biggestNum = num[0];
    }
    else if ((num[1] > num[0]) && (num[1] > num[2]) && (num[1] > num[3]) && (num[1] > num[4]) && (num[1] > num[5]))
    {
        biggestNum = num[1];
    }
    else if ((num[2] > num[0]) && (num[2] > num[1]) && (num[2] > num[3]) && (num[2] > num[4]) && (num[2] > num[5]))
    {
        biggestNum = num[2];
    }
    else if ((num[3] > num[0]) && (num[3] > num[1]) && (num[3] > num[2]) && (num[3] > num[4]) && (num[3] > num[5]))
    {
        biggestNum = num[3];
    }
    else if ((num[4] > num[0]) && (num[4] > num[1]) && (num[4] > num[2]) && (num[4] > num[3]) && (num[4] > num[5]))
    {
        biggestNum = num[4];
    }
    else
    {
        biggestNum = num[5];
    }
    return biggestNum;
}

}

4 个答案:

答案 0 :(得分:1)

您的代码引用了num[5],但是您创建了一个包含5个值的数组,这些值将是num[0]num[4]。所以你走出阵列的界限。

找到最大元素的一种常用方法是对数组进行排序,然后选择该排序数组中的第一个(或最后一个)项。

Java也可以使用Collections.max执行此操作,您只需执行以下操作:

 int biggest = Collections.max(Arrays.asList(num))

但是,如果你想自己做,比你现在的方法更好的方法是遍历你的数组并找到最大的价值:

public static int GetTheBiggestNum(int[] num) {
   if (num.length == 0) {
      throw new IllegalArgumentException("Array cannot empty")
   }

   int biggest = num[0]; 
   for (int i = 1; i < num.length; i++) {
      if (num[i] > biggest)
         biggest = num[i];
   }
   return biggest;
}

答案 1 :(得分:0)

将循环更改为此。最高的将是最高的数字。

int highest = 0;
for(int i=0; i<num.length; i++)
{
     num[i]=in.nextInt();
     System.out.println(num[i]);
     if(highest < num[i]){
        highest = num[i];
    }
}

如果将循环更改为此,则甚至不需要其他方法。

答案 2 :(得分:0)

你的阵列尺寸=&gt; 5.只能访问长度为5的数组0 to 4

但是在您的代码中,访问num[5],它会抛出ArrayIndexOutofBoundsException

有一件事是为什么谷歌不能在数组中找到最大数量。例如SO

答案 3 :(得分:0)

应该有 ArrayIndexOutOfBoundsException ,因为你在num数组中有5个元素,并且你试图访问方法 GetTheBiggestNum 中的 num [5] ,这是不存在的。您可以使用其他更好的方法从整数数组中获取最大元素。