【问题标题】:getting max and min of five input from user从用户那里获得五个输入的最大值和最小值
【发布时间】:2018-11-20 06:33:31
【问题描述】:
import java.util.Scanner;

class Compare
{
    int max = 0;
    int min = 0;

    public void max(int num)
    {
        if(num > max)
        {
            max = num;
        }
    }
    public void min(int num)
    {
        if(num < min)
        {
            min = num;
        }
    }
}
class Main
{
    public static void main(String args[])
    {
        Compare compare = new Compare();
        Scanner input = new Scanner(System.in);

        int sets = input.nextInt();
        for (int i = 0; i < sets ; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                int num_main = input.nextInt();
                compare.max(num_main);
                compare.min(num_main);
            }
            System.out.println(compare.max);
            System.out.println(compare.min);
        }
    }
}

我想计算来自用户的五个输入的最大值和最小值,我设法获得最大值但未能获得最小值,而是得到 0 作为我之前在比较类中初始化的最小值。我怎样才能以最简单的方式获得最小值

【问题讨论】:

  • 将比较类中的 min 变量设置为 Integer.MAX_VALUE
  • 并将最大变量设置为 Integer.MIN_VALUE
  • 使用可空的Integer 类并将其定义为空,然后也针对空进行测试
  • 它给你 0 因为你总是将 0 视为小于任何正整数的初始值。如果您想检查将 -1 作为输入,您将了解它的流程。

标签: java class methods max min


【解决方案1】:

您获得 0 作为最小值的原因是,当您调用 compare.min(num); 时,您的值与预定义的本地值 min 进行比较,该值等于 0。

当您将任何正数与 0 进行比较时,您将得到 0 作为最小值。

一个可行的解决方案是

class Compare
{
    int max = Integer.MIN_VALUE;
    int min = Integer.MAX_VALUE;


public void max(int num)
    {
        if(num > max)
        {
            max = num;
        }
    }
    public void min(int num)
    {
        if(num < min)
        {
            min = num;
        }
    }
}

这将保证您首先比较的内容将被保存为 min 值,并从此用作整个程序执行的新最小值。

【讨论】:

  • @DedicatedUser 替换你的 int min = 0; with int min = Integer.MAX_VALUE;
【解决方案2】:

这会给你一个想法

我修改了您的比较类。我使用包装类作为实例变量数据类型。

class Compare
{
Integer max;
Integer min;

public void max(int num)
{
    if (max == null) max = num;
    else if(num > max) max = num;
}

public void min(int num)
{
    if (min == null) min = num;
    else if(num < min) min = num;
}
}

现在你会得到你想要的输出。

【讨论】:

    【解决方案3】:

    您可以通过标记来简化这一过程,以跟踪第一个输入,然后将其余的与相同的输入进行比较。

    class Demo{
        public static void main(String[]args){
            Compare c = new Compare();
            try(java.util.Scanner sc = new java.util.Scanner(System.in)){
                int i = 1;
                final int m = 5;
                while(m>=i){
                    System.out.printf("Numer %d of %d: ", i, m);
                    if(sc.hasNextInt()){
                        c.process(sc.nextInt());
                        i ++;
                        continue;
                    }
                    System.out.println("Kindly input numbers only!");
                    sc.nextLine();/* clear input */
                }
            }
            System.out.printf("Max: %d, Min: %d%n", c.getMax(), c.getMin());
        }
    }
    
    class Compare{
    
        private int min;
        private int max;
        private boolean first = true;
    
        public int getMin(){
            return min;
        }
    
        public int getMax(){
            return max;
        }
    
        public void process(int val){
            if(first){
                this.min = this.max = val;
                first = false;
                return;
            }
            if(this.min > val){
                this.min = val;
            }
            if(this.max < val){
                this.max = val;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2020-08-16
      • 2017-03-11
      • 2020-02-28
      相关资源
      最近更新 更多