我试图以递归方式找到数组中最大的元素 . 用户必须输入数组将具有的元素数 . 我的错误是,如果列表没有大于列表中元素数的元素,则最大数字的输出将是列表中元素的数量 . 例如:包含{1 1 1 2 3}的5个整数的数组 . 答案是5而不是3 .
import java.util.*;
public class test7 {
public static int findLargest(int[] a, int max) {
int i=0, j=0, tempmax=0;
if (a.length == 1) return a[0]>max ? a[0]:max;
else if(max < a[i]){
max = a[i];
int[] tempArr = new int[a.length -1];
for (i=1; i<a.length; i++){
tempArr[j] = a[i];
j++;
}
tempmax = findLargest(tempArr, max);
return tempmax;
}
else{
int[] tempArr = new int[a.length -1];
for (i=1; i<a.length; i++){
tempArr[j] = a[i];
j++;
}
tempmax = findLargest(tempArr, max);
return tempmax;
}
}
public static void main(String[] args) {
int[] values = new int[100];
Scanner scan = new Scanner(System.in);
System.out.println("Enter the number of elements in your list: ");
int x = scan.nextInt();
if(x>1 || x<100){
for (int i=0; i<=(x-1); i++){
System.out.print("Enter your number: ");
System.out.println();
values[i] = scan.nextInt();
}
System.out.println();
System.out.println("The largest number is: "+findLargest(values, x));
}
else System.out.println("The maximum number of elements must be less than 100");
}
}
2 回答
你打电话给你的方法:
这告诉它假设最大的数字是
x
并尝试在列表中找到大于该值的任何内容 . 当然,这会产生您描述的确切问题 .通常,在找到最大数字时,您希望将候选项初始化为可能的最小数字,或者初始化数组中的第一个数字 .
如果您初始化为可能的最小数字(
Integer.MIN_VALUE
),那么只要您启动算法,第一个数字肯定会大于它,并将被选为下一个最大候选数字 .如果你初始化到数组中的第一个项目,那么如果这个数字是最高的,那么一切都很好 . 如果不是,那么当你遇到下一个更高的数字时,它将成为候选人,一切都很好 .
您选择哪一个取决于您(并且还取决于是否可以使用空数组),但要记住的是永远不要选择可能大于数组中所有元素的初始候选者 .
试试这个工作示例:
作为一种看起来像这样的方法:
然后你可以用
max(1,23,564,234,543);
之类的东西来调用它