【问题标题】:Problem with how to print "ALL" the longest string which have SAME longest length() that stored in array(JAVA)关于如何打印“ALL”最长字符串的问题,该字符串具有相同的最长长度()存储在数组(JAVA)中
【发布时间】:2018-10-29 12:37:20
【问题描述】:

编写一个程序,让用户输入一些字符串,这些字符串存储在一个字符串数组中,然后程序打印出用户输入的所有最长的字符串。

HAVE A PROBLEM HOW TO PRINT ALL SAME LONGEST LENGTH() 根据这句话要求“程序打印出所有最长的字符串”

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

}

【问题讨论】:

  • 以较小的步骤尝试: 1.) 读取输入的所有字符串并将它们存储在数组中并记住最大长度。 2.) 迭代数组,如果当前字符串长度与最大长度相同,则打印出来。

标签: java arrays string algorithm for-loop


【解决方案1】:

您的代码的问题是:
在您获取用户输入的循环内,您在那一刻打印“最长的字符串”。
这意味着用户输入的第一个字符串将是“最长的字符串”并将被打印,因为它的长度与 0 相比,当然它更长。
您必须在 2 个单独的循环中将字符串的输入和输出(最长字符串的打印)分开。
第一个循环获取字符串并通过比较计算最长字符串的长度,第二个循环遍历所有字符串并仅在其长度等于第一个循环中计算的最大长度时打印它:

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

【讨论】:

    【解决方案2】:

    您必须分两次完成。第一个循环找到字符串的最大长度。然后第二个循环可以迭代并仅打印具有最大长度的字符串,

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

    还有其他方法,您可以在遇到最长的字符串时将它们存储在集合中,并在找到新的更长字符串时重置集合,最后打印集合中的所有字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2023-03-10
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多