我正在尝试创建一个方法而不是返回第二个更大的数组。 当我返回值时,在控制台中出现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;
}
}
提前感谢您的时间!
答案 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;
}
}