使用 for 循环查找最小值

find minimum value using a for loop

我正在尝试从用户输入中获取 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);

有了这个:

if (number < smallest) {
    smallest = number; 
}  else {  
    smallest = number; 
}

你总是覆盖最小的值,无论数字是否更小。

完全删除 else 块,它将起作用。

编辑 另外:不要使用 0 作为默认值。 将您读取的第一个值作为 'original smallest'

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

解决方案:删除您的 else 语句。

if (number < smallest) {
    smallest = number; 
}

没有任何else。使用 else 时,您每次都将 smallest 的值设置为输入的值。

您的问题之一是您从 smallest = 0 开始,这意味着只有当其中一个输入小于零时它才会更改。有两种方法可以解决此问题。两者之一

  • int smallest = Integer.MAX_VALUE;
  • 开始

  • smallest 的更新条件更改为 if (number < smallest || i == 1 )

此外,如果 if 子句未触发,您不想更新 smallest,因此删除 else 块。

两个问题。

1 - 您的 if 应如下所示(删除 else 块):

if (number < smallest) {
 smallest = number; 
}

2 - 您应该将最小值初始化为一个非常大的数字,这样看到的第一个数字总是比它小:

int smallest = Integer.MAX_VALUE;

尝试这样的事情

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

这是我对 smallest 变量进行第一次赋值的偏好。在 loop 开始之前,对 smallest 单独赋值。 通过这种方式,我们确切地知道哪个是分配给 smallest 的第一条语句,并且正如其他人之前所说的那样,摆脱了 for loop 中的 if 语句的 else 块。

else 块导致了 OP 所说的 打印最后输入的数字 的问题。否 现在,由于提示出现在 2 个不同的地方,还为 'prompt' 添加了一个字符串变量,因此可以重复使用。注意循环计数从 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);