【问题标题】:Min, Max and equals for three numbers in JavaJava 中三个数字的最小值、最大值和等于值
【发布时间】:2022-12-09 15:31:59
【问题描述】:

我目前正在使用 Java,但有一个问题我没有找到正确的方法。它说在 if 语句中找出两个数字的最小值和最大值,以及相等的数字(允许嵌套 ifs)并且它变得非常复杂且难以理解。你能建议一个更好的方法吗?
这是我的代码:
long num1 = 1 ;
long num2 = 1 ;
long num3 = 1 ;
boolean error = false ;
Scanner sc = new Scanner(System.in) ;
do {
   if(error)
   {
      System.out.println("Sorry, error. Try again") ;
   }
   error = false ;
   System.out.print("Enter the first number : ") ;
   num1 = sc.nextLong() ;
                
   System.out.print("Enter the second number : ") ;
   num2 = sc.nextLong() ;
                
   System.out.print("Enter the third number : ") ;
   num3 = sc.nextLong() ;
                
   if(num1<=0 || num2<=0) error = true ;
   // number entered will iterate if error...
while(error == true) ;

// main conditions
if(num1>num2)
{
    if(num1>num3)
    {
        System.out.println(num1 + " is the greatest number") ;
        if(num2<num3) 
        {
            System.out.println(num2 + " is the smallest") ;
        } else if(num2==num3) {
            System.out.println(num2 + " and " + num3 + " are equal") ;
        }
     } 
 } else if(num2>num3) {
     if(num1!=num2)
     {
        System.out.println(num2 + " is the greatest number") ;
     } else {
        System.out.println(num2 + " and " + num1 + " are equal") ;
     }
     if(num1<num3) 
     {
        System.out.println(num1 + " is the smallest number") ;
     } else if(num1==num3) {
        System.out.println(num1 + " and " + num3 + " are equal") ;
     }
     } else if(num3>num2){
        if(num3!=num1)
        {
             System.out.println(num3 + " is the greatest") ;
        } else {
             System.out.println(num3 + " and " + num1 + " are equal") ;
        }
     }
}

我知道这个程序并没有涵盖所有的可能性,果然,当我运行它时,它并没有显示所有正确的结果。有人可以给我发送一个有组织的程序(带有cmets)吗?我们将不胜感激。

【问题讨论】:

  • 你可以做long min = Math.min(Math.min(num1, num2), num3);同一个班级将帮助最大

标签: java


【解决方案1】:

很简单,你可以使用 Math 模块的 max 和 min 函数。它是这样的

long a, b, c
a = Math.max(num1, Math.max(num2, num3))
//a will be the maximum number
b = Math.min(num1,Math.min(num2, num3))
//b will be the minimum number

//c is the middle number
if(num1 < a & num1 > b)
    c = num1
else if(num2 < a & num2 > b)
    c = num2
else
    c = num3

【讨论】:

  • 我知道我可以使用这个...但是可以展示如何使用嵌套 ifs 来做到这一点?这将非常复杂,这就是我写这个问题的原因。
【解决方案2】:

这道题的解法真的很简单(不明白为什么之前没人看到)——只需使用 AND 运算符即可。

因此,为了找出三者中最大的数字:

if(num1>num2 && num1>num3)
{
     System.out.println(num1 + " is the greatest") ;
} else if(num2>num3 && num2>num1) {
     System.out.println(num2 + " is the greatest") ;
} else if(num3>num2 && num3>num1) {
     System.out.println(num3 + " is the greatest") ;
}

找出最小的数字:
if(num1<num2 && num1<num3) {
     System.out.println(num1 + " is the smallest") ;
} else if(num2<num3 && num2<num1) {
     System.out.println(num2 + " is the smallest") ;
} else if(num3<num2 && num3<num1) {
     System.out.println(num3 + " is the smallest") ;
}

找出相等的数字:
if(num1==num2)
{
    System.out.println(num1 + " is equal to " + num2) ;
} else if(num2==num3) {
    System.out.println(num2 + " is equal to " + num3) ;
} else if(num1==num3) {
    System.out.println(num1 + " is equal to " + num3) ;
} else if(num1==num2 && num2==num3) {
    System.out.println("All the numbers are equal") ;
}

结合所有这些:
public static void main()
    {
            long num1 = 1 ;
            long num2 = 1 ;
            long num3 = 1 ;
            boolean error = false ;
            Scanner sc = new Scanner(System.in) ;
            do {
                if(error)
                {
                    System.out.println("Sorry, error. Try again") ;
                }
                error = false ;
                System.out.print("Enter the first number : ") ;
                num1 = sc.nextLong() ;
                
                System.out.print("Enter the second number : ") ;
                num2 = sc.nextLong() ;
                
                System.out.print("Enter the third number : ") ;
                num3 = sc.nextLong() ;
                
                if(num1<=0 || num2<=0) error = true ;
                // number entered will iterate if error...
            } while(error == true) ;
            if(num1>num2 && num1>num3)
            {
                System.out.println(num1 + " is the greatest") ;
            } else if(num2>num3 && num2>num1)
            {
                System.out.println(num2 + " is the greatest") ;
            } else if(num3>num2 && num3>num1)
            {
                System.out.println(num3 + " is the greatest") ;
            }
            
            if(num1<num2 && num1<num3)
            {
                System.out.println(num1 + " is the smallest") ;
            } else if(num2<num3 && num2<num1)
            {
                System.out.println(num2 + " is the smallest") ;
            } else if(num3<num2 && num3<num1)
            {
                System.out.println(num3 + " is the smallest") ;
            }
            
            System.out.println() ;    // for clarity
            if(num1==num2)
            {
                System.out.println(num1 + " is equal to " + num2) ;
            } else if(num2==num3)
            {
                System.out.println(num2 + " is equal to " + num3) ;
            } else if(num1==num3)
            {
                System.out.println(num1 + " is equal to " + num3) ;
            } else if(num1==num2 && num2==num3)
            {
                System.out.println("All the numbers are equal") ;
            }
            
    }
}

[笔记: 这些行没有正确缩进 - 所以请忽略这一点。]

【讨论】:

    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 2013-11-08
    • 2019-05-21
    • 2016-09-30
    • 2017-04-20
    • 2019-04-18
    • 2013-11-11
    • 2015-03-08
    相关资源
    最近更新 更多