2013-10-18 89 views
0

所以我的任務是寫一個遞歸Java方法,該方法可以在不使用任何循環的情況下找到整數數組的最大值。輸入是包含單個整數的第一行n < 10.下一行包含由空格分隔的n個數字。輸出應該是一個整數。調用你的程序FindMax。下面的代碼是我迄今爲止,它編譯但不是我能夠進入線程「main」中的異常java.lang.ArrayIndexOutOfBoundsException:

input line 1: 5 (n) } 

這是我需要能夠輸入

input line2: 2 3 4 5 3 } 

它讓我進入

input: 5 (n) 
input: 2 
input: 3 
input: 4 
input: 5 
input: 3 

也進入上述後我得到:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 
at FindMaxtesting.getmax(FindMaxtesting.java:35) 
at FindMaxtesting.getmax(FindMaxtesting.java:48) 
at FindMaxtesting.getmax(FindMaxtesting.java:42) 
at FindMaxtesting.getmax(FindMaxtesting.java:42) 
at FindMaxtesting.getmax(FindMaxtesting.java:42) 
at FindMaxtesting.getmax(FindMaxtesting.java:42) 
at FindMaxtesting.main(FindMaxtesting.java:17) 

這是到目前爲止我的代碼:

import java.util.Scanner; 

public class FindMaxtesting 
{ 
    public static void main (String[]args) 
    { 
    Scanner sc = new Scanner(System.in); 
    int n = sc.nextInt(); 
    int i = 0; 
    int fin = 0; 
    System.out.println(getmax(Inca(n) , n , fin , i)); 
    } 

    public static int[] Inca(int n) 
    { 
    Scanner sc = new Scanner(System.in); 
    int[] arr = new int[n]; 
    for(int j=0;j<n;++j) 
    { 
    arr[j] = sc.nextInt(); 
     } 
     return arr; 
    }  

    public static int getmax (int arr[], int n, int fin, int i) 
    { 
     int temp = 0; 
     if (fin < arr[i]) 
     { 
     temp = fin; 
    fin = arr[i]; 
    arr[i] = temp; 
    i++; 
    getmax(arr , n , fin , i); 
     } 

     else if (fin > arr[i]) 
     { 
     i++; 
    getmax(arr , n , fin , i); 
     } 

     else if (i == n-1) 
     { 
     return fin; 
     } 
     return fin; 
    } 
} 
+0

'return i == n-1? (arr [i] Marcelo

+0

看到Paul的回答,一直好。 'return i> = n? fin:getmax(arr,n,arr [i] Marcelo

回答

0

你的問題的實質是,在GetMax的,你需要添加行

if (i >= n) 
    return fin; 

您通過陣列遞歸搜索,這是不真的是最好的辦法,但我認爲這是一個家庭作業問題,你需要說什麼時候停止查看整個數組,但是你繼續看看數組。當i> = n時,你知道你已經搜索了整個數組,並且可以返回fin,因爲沒有更多的值可以更大。

相關問題