簡體   English   中英

線程“主”中的異常java.lang.ArrayIndexOutOfBoundsException:

[英]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException:

因此,我的工作是編寫一個遞歸Java方法,該方法無需使用任何循環即可查找整數數組的最大值。 輸入是第一行,其中包含一個整數n <10。下一行包含n個由空格分隔的數字。 輸出應為單個整數。 調用您的程序FindMax。 到目前為止,下面的代碼是我可以編譯的,但是我無法輸入

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

問題的實質是在getmax中,您需要添加以下行

if (i >= n)
    return fin;

您正在遞歸地搜索數組,但這並不是最好的方法,但是我認為這是一個作業問題,您需要說什么時候停止在數組中進一步查找,但是您仍在繼續查找在數組中。 當i> = n時,您知道已經搜索了整個數組,並且可以返回fin,因為沒有其他值可以更大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM