печать одного элемента, если все элементы в массиве равны, при печати самого большого, если все элементы не равны

#java #if-statement #arraylist

#java #if-оператор #arraylist

Вопрос:

Я написал код для вывода наибольшего значения последовательности, если числа заданы пользователем. Если пользователь вводит только равные значения, один и тот же вывод будет повторяться по количеству вводов, предоставленных пользователем.

Проблема здесь в том, что, хотя я написал условие if, чтобы избежать повторения одного и того же вывода, но оно не работает. Я был бы очень признателен за помощь.

Проблема:

 int y = 0;
        for(int i : a){
            int v = 0;
            if(i == a.get(0)){
                y = y   1;
            }
            for(int o : a){
                if(i >= o){
                    v = v   1;
                }
            }
            if(y == a.size()){
                System.out.println("Largest_num = " a.get(0));
            }
            else if((v == a.size())amp;amp;(y != a.size())){
                System.out.println("Largest_num = " i);
            }
 

Весь код:

 import java.util.Scanner;
import java.util.ArrayList;
class Noice{
    public static void main(String args[]){
        Scanner obj = new Scanner(System.in);
        System.out.println();
        ArrayList<Integer>a = new ArrayList<Integer>();
        System.out.print("Enter length: ");
        int d = obj.nextInt();
        System.out.println();
        for(int i = 0; i < d; i  ){
            int c = i   1;
            System.out.print("Num" c " = ");
            int b = obj.nextInt();
            a.add(b);
        }
        int y = 0;
        for(int i : a){
            int v = 0;
            if(i == a.get(0)){
                y = y   1;
            }
            for(int o : a){
                if(i >= o){
                    v = v   1;
                }
            }
            if(y == a.size()){
                System.out.println("Largest_num = " a.get(0));
            }
            else if((v == a.size())amp;amp;(y != a.size())){
                System.out.println("Largest_num = " i);
            }
        }

    }
}
 

Ответ №1:

Мне трудно понять, что делает каждая из ваших переменных, рекомендуется использовать имена переменных, которые объясняют их назначение.

Из того, что я могу сказать, y отслеживает, сколько значений равно первому значению в массиве. Ваше первое условие if затем проверяет, совпадает ли количество идентичных значений ( y ) с размером массива. Если это так, то вам не нужно else if , и просто else должно быть достаточно, если я правильно понимаю проблему.

Я также изо всех сил пытаюсь понять, что делают цикл for(int o : a) и переменная v . Опять же, это трудно понять, учитывая, что имена ваших переменных не отображают их функциональность, но, похоже, вы можете отказаться от этого вложенного цикла и просто отслеживать текущую максимальную переменную. Раньше for(int i : a) вы могли добавить что-то вроде int max = a.get(0); . Затем, в вашем for цикле, если вы сталкиваетесь с числом больше max , вы обновляете max это значение. Однако выполнение этого способа не потребует никаких условий вообще, и вы можете просто вывести max в конце программы.