编写一个程序,用户输入许多字符串,这些字符串存储在字符串数组中,然后打印出用户输入的所有最长的字符串。
存在一个问题,该问题如何打印所有相同的最长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);
}
答案 0 :(得分:1)
您的代码存在的问题是:
在获取用户输入的循环内,您此时将打印“最长字符串”。
这意味着用户输入的第一个字符串将是“最长字符串”,并且将被打印,因为它的长度与0比较,当然更长。
您必须在2个单独的循环中将字符串的输入和输出(最长的字符串的打印)分开。
第一个循环获取字符串,并通过比较计算最长字符串的长度,第二个循环遍历所有字符串,并仅在其长度等于在第一个循环中计算出的最大长度时打印它: / p>
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");
}
}
答案 1 :(得分:0)
您必须分两次通过。第一个循环查找字符串的最大长度。然后第二个循环可以迭代并仅打印具有最大长度的字符串,
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();
}
还有其他方法,您可以在遇到最长字符串时将最长的字符串存储在集中,并在找到新的更长字符串时将其重置,最后将集中的所有字符串打印出来。