2014-09-23 85 views
-3

.txt文件具有這些值:數組返回值

該代碼是指讀出的數字在一個.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; 
} 

} 
+1

爲什麼不只是調試這個簡單的程序?這將花費更少的時間,你將學到更多 – nogard 2014-09-23 08:20:37

+3

什麼是錯誤? – 2014-09-23 08:22:07

+0

你有沒有閱讀過關於Java'List'類和'Collections.sort()'方法? – vikingsteve 2014-09-23 08:22:21

回答

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; 
} 
+0

是的,在現在沒有看到數字[5]。謝謝 – Candy 2014-09-23 08:41:16

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]; 
    } 
} 

如果你改變你的循環,你甚至不需要其他方法。

0

你的數組的大小=> 5.只能訪問0 to 4爲數組長度爲5

但在你的代碼,訪問num[5],它會拋出ArrayIndexOutofBoundsException

一件事是爲什麼不穀歌找到數組中的最大數量。例如,這SO

0

應該有ArrayIndexOutOfBoundsException異常,因爲你必須在NUM陣列5元,而你試圖訪問NUM [5]內部方法GetTheBiggestNum,這不exist.You也可以使用其他更好的方法從整數數組中獲取最大元素。