最大/最小输出未展示正确的值。

huangapple go评论80阅读模式
英文:

The Largest/Smallest Outputs do not showcase the right values

问题

应该输出输入中的最大/最小数字,看起来有什么问题?我尝试在网上查找,源代码似乎是相同的。谢谢您的帮助。

源代码:

package counting.largest.smallest;

import java.util.Scanner;

public class CountingLargestSmallest {

    public static void main(String[] args) {

        Scanner TheN = new Scanner(System.in);

        int counter = 0;
        int number;
        int smallest = Integer.MIN_VALUE;
        int largest = Integer.MAX_VALUE;

        while (counter < 10) {
            System.out.print("Integer=");

            number = TheN.nextInt();
            counter++;

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

        System.out.println("\nSmallest=" + smallest);
        System.out.println("Largest=" + largest);
    }
}

输出:

Integer=1
Integer=2
Integer=3
Integer=4
Integer=5
Integer=6
Integer=7
Integer=8
Integer=9
Integer=10

Smallest=1
Largest=10
英文:

Should receive an output of the largest/smallest numbers within the inputs, what seems to be the problem? I have tried looking it up online, the source code appears to be the same. Thank you for your assistance.

Source code:

package counting.largest.smallest;

import java.util.Scanner;

public class CountingLargestSmallest {

    public static void main(String[] args) {

        Scanner TheN = new Scanner(System.in);

        int counter = 0;
        int number;
        int smallest = Integer.MIN_VALUE;
        int largest = Integer.MAX_VALUE;

        while (counter &lt; 10) {
            System.out.print(&quot;Integer=&quot;);

            number = TheN.nextInt();
            counter++;

            if (number &lt; smallest) {
                number = smallest;
            } else if (number &gt; largest) {
                number = largest;
            }
        }

        System.out.println(&quot;\nSmallest=&quot; + smallest);
        System.out.println(&quot;Largest=&quot; + largest);
    }
}

Output:

Integer=1
Integer=2
Integer=3
Integer=4
Integer=5
Integer=6
Integer=7
Integer=8
Integer=9
Integer=10

Smallest=-2147483648
Largest=2147483647

答案1

得分: 1

这是翻译好的部分:

有3个错误:

int smallest=Integer.MIN_VALUE; 
int largest=Integer.MAX_VALUE;
number=smallest;
number=largest;
  1. 使用 else if<br>

1: 当你想找到最小的数时,将它保持为 Integer.MAX_VALUE,当你想找到最大的数时,将它保持为 Integer.MIN_VALUE。<br>

为什么对于最小值我们初始化为 Integer.MAX_VALUE,对于最大值我们初始化为 Integer.MIN_VALUE?<br>

假设你想从用户那里获取 n 个数字相乘。所以我们将变量 mul 声明并初始化为 1。因为我们知道任何数乘以 1 都会得到相同的数。<br>
然而,如果我们用 0 来初始化 mul,那么结果将始终为 0
所以我们说乘法中的 1单位元。<br>
类似地,为了找到 最小 数,我们使用一个单位元,即 Integer.MAX_VALUE。<br>
这样,小于 Integer.MAX_VALUE 的数将保存在 Smallest 变量中。

int smallest=Integer.MAX_VALUE; 

同样地,对于最大值,我们使用 Integer.MIN_VALUE 进行初始化,以便大于 Integer.MIN_VALUE 的数被保存在 largest 变量中。

int largest=Integer.MIN_VALUE;

2: 你正在将 number 变量赋值为 smallestlargest 的值,应该是 smallest=numberlargest=number。<br>
当你写 x=0 时,它表示 x 等于 0,这意味着 x 发生了变化,类似地,当你写 number=smallest 时,number = Integer.MAX_VALUE,而 smallest 根本没有变化。<br>
所以你应该像这样写:smallest = number,这意味着最小值是这个数,而且 smallest 在每次满足条件时都会改变。

3: 当你写下面的代码时

if(condition){

}else if(conditon){

}

只有在第一个 if 语句为 false 时,else if 才会执行,如果第一个条件为 true,则第二个 if 永远不会被执行。<br>
如果我们有一个降序的数字,那么第二个 if 将永远不会被执行,从而导致 largest 变量中有 Integer.MIN_VALUE。<br>
而在这里,你想要同时检查 最小最大,所以我们应该为每个条件都有独立的 if 语句。

if(condition){

}
if(condition){

}

代码:

            Scanner TheN= new Scanner(System.in);  
            int counter=0;
            int number;
            // 已更改
            int smallest=Integer.MAX_VALUE; 
            int largest=Integer.MIN_VALUE;
            while(counter&lt;10){
                  System.out.print(&quot;Integer=&quot;);     
                  number=TheN.nextInt();    
                  counter++;
                  if(number&lt;smallest){
                     // 已更改  
                     smallest= number;
                  }
                  if(number&gt;largest){
                     // 已更改  
                     largest=number;
                 }
            }
            System.out.println(&quot;\nSmallest=&quot;+smallest);
            System.out.println(&quot;Largest=&quot;+largest);

输出:

Integer=1
Integer=2
Integer=2
Integer=4
Integer=3
Integer=6
Integer=7
Integer=8
Integer=9
Integer=10

Smallest=1
Largest=10
英文:

there were 3 bugs:

1.

int smallest=Integer.MIN_VALUE; 
int largest=Integer.MAX_VALUE;

2.

number=smallest;
number=largest;
  1. Using else if<br>

1: When you want to find a min number keep it Integer.MAX_VALUE and when you want to find max keep it has Integer.MIN_VALUE.<br>

Why for min we Initialize Integer.MAX_VALUE and for max we Initialize Integer.MIN_VALUE?<br>

Say you want to multiple n numbers from the user. So we will declare and initialize mul variable to 1. cause we know any number multiple by 1 will give us the same number.<br>
Whereas if we initialize mul with 0 it will give us 0 only.
So we say 1 for multiplication is identity.<br>
Similarly, for finding Minimum number we use an identity that is Integer.MAX_VALUE.<br>
So that number that less then Integer.MAX_VALUE are saved in Samllest variable.

 int smallest=Integer.MAX_VALUE; 

Similarly for max we initialize it with Integer.MIN_VALUE SO that number that are greater then Integer.MIN_VALUE are stored in largest variable.

int largest=Integer.MIN_VALUE;

2: You are assigning number variable the value of smallest and largest it should be like smallest=number and largest=number<br>
when you write x=0 it says x is 0 that means x is changed, Similarly when you write number=smallest its number = Integer.MAX_VALUE and smallest is not changing at all.<br>
So you should write like smallest = number, It means smallest is the number and smallest is changing every time condition satisfies.

3: When you write

if(condition){

}else if(conditon){

}

else if is only excuted when first if statement if false and if first condition is true second if is never executed.<br>
if we have descending number then second if will never be excuted which would result in having Integer.MIN_VALUE in largest variable.<br>
And here you want to check for both min and max so we should have indepent if statement for each

if(condition){

}
if(condition){

}

Code:

            Scanner TheN= new Scanner(System.in);  
            int counter=0;
            int number;
            // changed
            int smallest=Integer.MAX_VALUE; 
            int largest=Integer.MIN_VALUE;
            while(counter&lt;10){
                  System.out.print(&quot;Integer=&quot;);     
                  number=TheN.nextInt();    
                  counter++;
                  if(number&lt;smallest){
                     // changed  
                     smallest= number;
                  }
                  if(number&gt;largest){
                     // changed  
                     largest=number;
                 }
            }
            System.out.println(&quot;\nSmallest=&quot;+smallest);
            System.out.println(&quot;Largest=&quot;+largest);

Output:

Integer=1
Integer=2
Integer=2
Integer=4
Integer=3
Integer=6
Integer=7
Integer=8
Integer=9
Integer=10

Smallest=1
Largest=10

huangapple
  • 本文由 发表于 2020年10月11日 16:39:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/64302102.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定