比预期的Java更多的结果

时间:2018-05-08 17:34:42

标签: java loops

我正在尝试创建一个方法而不是返回第二个更大的数组。 当我返回值时,在控制台中出现2个或更多值。我不明白为什么会这样。有人可以帮我理解这个吗? 我做了一个方法来搜索更大的值,所以我可以在返回第二个更大的那个上使用它。

public class ThirdMax {

    public static int maxNum (int[] array) { //Returns the bigger value of the array.

        int aux = 0;    //Variable to store the bigger value found and compare it with the rest.
        for (int i = 0; i < array.length; i++) {

            if(array[i] > aux) {    //If the actual value is bigger than the aux
                aux = array[i];     //override the aux value with actual value.
            }
        }
        System.out.println(aux);
        return aux;
    }

    public static int secondMax(int[] array) {  //Returns the second bigger value on the array.
        int valorMax = maxNum(array);   //Store the bigger value on a variable so we can use it later.
        int valorMax2 = 0;              //Variable to store the result.
        int[] auxArray = new int [array.length];                                
        for (int i = 0; i < array.length; i++) {
            if(array[i] == valorMax) {  //When we get to the valorMax, we replace it in the array with a 0.
                array[i] = 0;
                } else {
                    auxArray[i] = array[i];
                }

            valorMax2 = maxNum(auxArray); //Search again the bigger value after the previous one is replaced by 0.
            }
        return valorMax2;
        }

}

提前感谢您的时间!

3 个答案:

答案 0 :(得分:1)

您多次致电@model Games <!-- asp-area, asp-controller, asp-action are tag helpers on the form --> <form asp-area="" asp-controller="game" asp-action="manage"> <!-- hidden type input for the Id? --> <input type="hidden" asp-for="Id" /> <dl> <dt> <label asp-for="Title"></label> </dt> <dd> <input type="text" asp-for="Title" /> </dd> <dt> <label asp-for="Details"></label> </dt> <dd> @for(int i = 0; i < Model.Details.Count(); i++) { <label asp-for="Details[i].MakeUpProperty1"></label> <!-- textbox for property 1? --> <input type="text" asp-for="Details[i].MakeUpProperty1" /> <label asp-for="Details[i].MakeUpProperty2"></label> <!-- number type input box for property 2? --> <input type="number" asp-for="Details[i].MakeUpProperty2" /> <!-- dropdown for property 3? --> <select asp-for="Details[i].MakeUpProperty3" asp-items="Model.AvailableProperty3List.ToSelectListItem()" ></select> } </dd> </dl> </form> 。每个都打印一个最大值。

因此您收到了多个结果。

要立即解决此问题,请删除功能中的打印maxNum(auxArray);

在返回之前只制作一个打印功能

System.out.println(aux);

但是你的代码看起来不太好。它需要多重改进。

要查找第二大数字,您只需要像这样循环一次:

System.out.println(valorMax2);
return valorMax2;

这看起来不错,但不能扩展到找到第n个最大数字,因为我们的if条件会非常复杂。然后你尝试一次找到一个最大数字:

public static int secondMax(int[] array) {
   int max = Integer.MIN_VALUE; // Max value
   int secondMax = Integer.MIN_VALUE; // Second max value, its our result

   for (int i = 0; i < array.length; i++) {
      if (array[i] > max) {
        secondMax = max;
        max = array[i];
      } else if (array[i] > secondMax) {
        secondMax = array[i];
      }
   }
   return secondMax;
}

答案 1 :(得分:0)

由于您将最大数字设置为0,因此您实际上不需要auxArray。 您也不需要第二个valorMax。 您可能希望将代码重构为以下内容。

public static int secondMax(int[] array) {  
    int valorMax = maxNum(array);   
    for (int i = 0; i < array.length; i++) {
        if(array[i] == valorMax) { 
            array[i] = 0;
        }
    }
    return maxNum(array); // just return the result of maxNum(array)
}

如果您不希望程序将2个数字打印到控制台,请务必从maxNum中删除print语句。

答案 2 :(得分:-1)

因为你把第二个最大功能放在了错误的地方。

public static int secondMax(int[] array) {  
    int valorMax = maxNum(array);   
    int valorMax2 = 0;             
    int[] auxArray = new int [array.length];                                
    for (int i = 0; i < array.length; i++) {
        if(array[i] == valorMax) { 
            array[i] = 0;
            } else {
                auxArray[i] = array[i];
            }
        }
    valorMax2 = maxNum(auxArray); // this should be out of loop
    return valorMax2;
    }

}