получить максимум и минимум пять входных данных от пользователя - PullRequest
0 голосов
/ 11 июня 2018
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 в качестве минимального значения, которое было инициализировано ранеев классе сравнения.Как я могу получить минимальное значение самым простым способом

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Это даст вам идею

Я изменил ваш класс сравнения.Я использовал классы-оболочки в качестве типов данных переменных экземпляра.

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

Теперь вы получите желаемый результат.

0 голосов
/ 11 июня 2018

Вы можете упростить это с помощью флага, чтобы отслеживать первый ввод, а затем сравнить остальные с тем же.

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;
        }
    }
}
0 голосов
/ 11 июня 2018

Причина, по которой вы получаете 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 значение и, следовательно, будет использоваться как новое минимальное значение для всего выполнения вашей программы.

...