使用 for 循环找到最小值
Posted
技术标签:
【中文标题】使用 for 循环找到最小值【英文标题】:find minimum value using a for loop 【发布时间】:2016-08-05 13:28:38 【问题描述】:我正在尝试从用户的输入中获取 10 个整数,并使用 for
循环找到最小值。
我正在努力正确编写if
语句。它应该采用第一个输入并将其设为最小,然后将下一个输入与该输入进行比较。
我的最终打印语句只打印最后输入的数字。
Scanner scan = new Scanner(System.in);
int smallest = 0;
int number = 0;
for (int i = 1; i <= 10; i++)
System.out.print("Enter a number > ");
number = scan.nextInt();
if (number < smallest)
smallest = number;
else
smallest = number;
System.out.println("The minimum is " + smallest);
【问题讨论】:
【参考方案1】:有了这个:
if (number < smallest)
smallest = number;
else
smallest = number;
无论数字是否更小,您总是覆盖最小的值。
完全删除 else 块,它会工作。
编辑 另外:不要使用 0 作为默认值。 将您读取的第一个值作为“原始最小值”
System.out.print("Enter a number > ");
int smallest = scan.nextInt();
int number = 0;
for (int i = 1; i <= 9; i++)
System.out.print("Enter a number > ");
number = scan.nextInt();
if (number < smallest)
smallest = number;
【讨论】:
只是为了完成您的答案,将最小的初始化为 0 可能会产生不正确的结果。最好将其初始化为最大的整数值。 这是可能的。但是,如果没有元素。为什么不将值初始化为读取的第一个值,然后执行循环? 这将是另一种绕过它的方法。 恕我直言,你想用空整数找到最小值,它应该抛出一个异常。如果你用空集合调用Collections.min()
,它会抛出一个NoSuchElementException
。因为如果没有元素,用这样的集合调用 min 是没有意义的,会被认为是错误。
@Nier 是的,但在这种情况下,我们不会从可以预先测试的集合或数组开始,在我们设置默认值之前,这将需要对代码进行更大的重构:首先将值读入集合,然后寻找最小的成员。【参考方案2】:
解决方案:删除您的 else
声明。
if (number < smallest)
smallest = number;
没有任何else
。使用else
,您每次都将smallest
的值设置为输入的值。
【讨论】:
【参考方案3】:您的一个问题是您从smallest = 0
开始,这意味着只有当其中一个输入小于零时它才会改变。有两种方法可以解决此问题。要么
int smallest = Integer.MAX_VALUE;
开头
或
将smallest
的更新条件更改为if (number < smallest || i == 1 )
此外,如果if
子句未触发,您不想更新smallest
,因此请删除else
块。
【讨论】:
可能是一个想法:不要将 minimum 的值初始化为 Integer.MAX_VALUE。 (如果没有读取 int,则会导致错误的结果)。相反,将其初始化为输入的第一个整数,然后使用循环。 @Stultuske 我的第二个选项等同于您的建议。但是,如果您愿意,请随时发布您自己的答案。 @Stultuske 抱歉,我没有注意到您已经这样做了。但是现在你已经编辑了它,你已经赢得了我的支持。 我也错过了你的第二部分。这确实让我的言论相当......毫无意义:) @DavidWallace 谢谢你的工作。但是,我并不完全理解在条件中添加 i == 1 的作用。你介意简单解释一下吗?【参考方案4】:两个问题。
1 - 你的 if 应该看起来像这样(删除 else 块):
if (number < smallest)
smallest = number;
2 - 你应该将 minimum 初始化为一个非常大的数字,这样第一个看到的数字总是小于它:
int smallest = Integer.MAX_VALUE;
【讨论】:
使用smallest = Integer.MAX_VALUE
。给出一个数值 999999 是个坏主意。【参考方案5】:
试试这样的
Scanner scan = new Scanner(System.in);
int smallest = 0;
int number = 0;
for (int i = 1; i <= 10; i++)
System.out.print("Enter a number > ");
number = scan.nextInt();
if (i == 1)
smallest = number;
if (number < smallest)
smallest = number;
System.out.println("The minimum is " + smallest);
【讨论】:
【参考方案6】:这将是我对 smallest
变量进行第一次赋值的偏好。在loop
开始之前,对smallest
进行单独分配。
这样我们就可以准确地知道哪个是分配给smallest
的第一条语句,并且正如其他人之前所说的那样,在loop
中去掉if
语句的else 块。
else
块导致了 OP 所说的打印最后输入的数字的问题。 ñ
现在,由于提示出现在 2 个不同的地方,因此还为“提示”添加了一个字符串变量,以便可以重复使用。注意循环计数从 10 减少到 9,以保持仅提示用户输入 10 次。
Scanner scan = new Scanner(System.in);
int smallest = 0;
int number = 0;
String prompt = "Enter a number > ";
// First user prompt
// and first assignment to 'smallest'
System.out.print(prompt);
smallest = scan.nextInt();
for (int i = 1; i <= 9; i++)
System.out.print(prompt);
number = scan.nextInt();
if (number < smallest)
smallest = number;
System.out.println("The minimum is " + smallest);
【讨论】:
以上是关于使用 for 循环找到最小值的主要内容,如果未能解决你的问题,请参考以下文章