Проблема с тем, как напечатать «ALL» самую длинную строку, имеющую одинаковую самую длинную длину (), которая хранится в массиве (JAVA) - PullRequest
0 голосов
/ 29 октября 2018

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

ИМЕЙТЕ ПРОБЛЕМУ КАК ПЕЧАТЬ ВСЕ ОДНОВРЕМЕННУЮ ДЛИНУ () В соответствии с этим предложением, которое требует "программа распечатывает все самые длинные строки"

PS. Мой код может распечатать только ОДНУ самую длинную строку, НЕ ВСЕ длинную строку. Как это исправить.

 public static void method4(){
    Scanner console = new Scanner(System.in);
    String[] list = new String[5];

    int maxLength = 0;
    String longestString = null;
    String longestString1 = null;
    for (int i = 0; i < list.length; i++) {
        System.out.println("Enter a string 5 times: ");
        list[i] = console.next();

        if (list[i].length() > maxLength){
            maxLength = list[i].length();
            longestString = list[i];


        }
    }
    System.out.println("Longest string: "+longestString+ "\n\t\t"+longestString1);

}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Проблема с вашим кодом:
внутри цикла, который вы получаете от пользователя, вы печатаете «самую длинную строку» в этот момент.
Это означает, что первая строка, которую вводит пользователь, будет «самой длинной строкой» и будет напечатана, поскольку ее длина сравнивается с 0 и, конечно, она длиннее.
Вы должны разделить ввод строк и вывод (печать самых длинных строк) в 2 отдельных цикла.
1-й цикл получает строки и, сравнивая, вычисляет длину самой длинной строки, а 2-й выполняет итерацию всей строки и печатает ее, только если его длина равна максимальной длине, которая была вычислена в 1-м цикле:

String[] list = new String[5];

int maxLength = 0;

Scanner scanner = new Scanner(System.in);

for (int i = 0; i < list.length; i++) {
    System.out.println("(" + (i + 1) + ") Enter a string: ");
    list[i] = scanner.nextLine();

    if (list[i].length() > maxLength){
        maxLength = list[i].length();
    }
}

scanner.close();

int counter = 0;
for (String s : list) {
    if (s.length() == maxLength){
        counter++;
        System.out.println("(" + counter + ") Longest string: " + s + "\n");
    }
}
0 голосов
/ 29 октября 2018

Вы должны сделать это в два прохода. Первый цикл находит максимальную длину строки. Затем второй цикл может повторяться и печатать только строки, которые имеют максимальную длину,

public static void method4(Scanner console){
    String[] list = new String[5];

    int maxLength = 0;
    System.out.println("Enter a string 5 times: ");
    for (int i = 0; i < list.length; i++) {
        list[i] = console.next();

        if (list[i].length() > maxLength){
            maxLength = list[i].length();
        }
    }
    for (int i = 0; i < list.length; i++) {
        if (list[i].length() == maxLength) {
            System.out.println("Longest string: "+list[i]);
        }
    }

}

public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    method4(sc);
    sc.close();
}

Существуют и другие подходы, в которых вы можете хранить самые длинные строки в наборе, когда встречаете их, и сбрасывать набор, как только найдете новую более длинную строку и, наконец, распечатать все строки в наборе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...