【问题标题】:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:
【发布时间】:2013-10-18 21:33:21
【问题描述】:

所以我的任务是编写一个递归 Java 方法,它找到一个数组的最大值 不使用任何循环的整数。输入是包含单个整数 n

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

【问题讨论】:

  • return i == n-1 ? (arr[i] &lt; fin ? fin : arr[i]) : getmax(arr, n, arr[i] &lt; fin ? fin : arr[i], i + 1);
  • 看到保罗的回答,我的评论可能会更好。 return i &gt;= n ? fin : getmax(arr, n, arr[i] &lt; fin ? fin : arr[i], i + 1);

标签: java arrays


【解决方案1】:

你的问题的本质是在getmax中你需要添加行

if (i >= n)
    return fin;

您正在递归地搜索数组,这并不是最好的方法,但我认为这是一个家庭作业问题,您需要说明何时停止进一步查看数组,但是您继续在数组中进一步查看。当 i>=n 时,你知道你已经搜索了整个数组,并且可以返回 fin,因为没有其他值可以更大。

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 2011-09-09
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多