【问题标题】:Accept 5 names and print the longest name?接受 5 个名字并打印最长的名字?
【发布时间】:2015-09-23 11:10:33
【问题描述】:

我想要 5 个名字中最长的名字。我想我应该使用compareTo() 方法还是length()

输出必须是这样的:

enter 5 names :
Joey
Mark
Catherine
Zachery
Foster

Longest name is Catherine.

我应该使用什么方法以及如何使用?到目前为止,这是我的代码:

Scanner x = new Scanner(System.in);
String name = ""
System.out.print("Enter 5 names");
name = x.nextLine();
name2 = x.nextLine();
name3 = x.nextLine();
name4 = x.nextLine();
name5 = x.nextLine();

if(name.compareTo(name2)>0)  //is this method right?

【问题讨论】:

  • 你应该使用String#length()for loop :)
  • @TheLostMind 和数据结构(数组、列表...)
  • @ReutSharabani - 可能是,但不是强制。您可以找到当前姓名和姓氏中较大的一个 :)
  • longest = Collections.max(Arrays.asList(name, name2, ...), Comparator.comparing(String::length)).
  • 重点是,将它们存储在namename1 ... namen 并不是存储它们的好方法。这不是存储数据的好方法。如果您完全放弃存储它们而不是是 - 不需要存储它们的最长名称。

标签: java compareto string-length


【解决方案1】:

.compareTo 告诉您哪个字符串按字典顺序排在第一位(0 如果 s1>s2)

String s1 = "abc";
String s2 = "def";
s1.compareTo(s2) < 0;

.length() 返回字符串的长度

s1.length()==3;

在您的情况下,您需要根据长度进行比较,因此您需要后者。如果只有 5 个名字,你可以取第一个并假设它是最长的,然后通过保存“迄今为止最长的”并在它们出现时进行比较来逐一阅读其他的。毕竟,你只关心最长的。

如果您希望它们按长度排序,同时仍保留它们全部,则需要将它们存储在某种集合(列表、数组)中,然后根据长度对其进行排序。

问题很简单,我就不直接提供代码了,自己去摸一摸,可以的:)

【讨论】:

    【解决方案2】:
    import java.util.Scanner;
    
    public class LenghtyName {
    
        public static void main(String[] args) {
    
            Scanner x = new Scanner(System.in);
            /*
             Instead of declaring 5 different String variable
             just use String array with size = 5
             */
            String[] names = new String[5];
    
            System.out.print("Enter 5 names :");
    
            names[0] = x.nextLine();
            names[1] = x.nextLine();
            names[2] = x.nextLine();
            names[4] = x.nextLine();
            names[5] = x.nextLine();
    
            //Assume lenthyName as empty String
            String lengthyName = "";
    
            /*
             Iterate over String array using for-each loop
             */
            for (String name : names) {
                /*
                 -Check null to avoid NullPointerException
                 -Trim the left and right blank space in name by #trim()
                 -Compare current name length with lengthyName if greater 
                 replace the lengthyName by current name.
                 */
                if (name != null && name.trim().length() > lengthyName.length()) {
                    lengthyName = name;
                }
            }
    
            /*
             Print length name
             */
            System.out.println("Longest name is " + lengthyName);
        }
    }
    

    【讨论】:

      【解决方案3】:

      这个怎么样?

      Scanner in = new Scanner(System.in);
      // no need to have 5 all over the code.
      // Define it once to avoid "magic nubmers"
      int namesCount = 5;
      // fun fact: shortest name is always "". We don't have to use null
      String longestName = "";
      System.out.print("Enter " + nameCount + " names:");
      for (int i=0; i< nameCount; i++){
          // store new name from user
          String candidate = in.readLine();
          // is this one longer than the current longest?
          if (longestName.length() < candidate.length()){
              // found a longer name
              longestName = candidate;
          }
      }
      System.out.println("Longest name is " + longestName); 
      

      这放弃了存储名称,因为您似乎只使用最长的名称。它还概括了要迭代的名称数量,最重要的是变量名称是有意义的名称。

      【讨论】:

        【解决方案4】:

        这是一个可行的解决方案:

        public class LongestWord {
        
            public static String getLongestString(String[] array) {
                  int maxLength = 0;
                  String longestString = null;
                  for (String s : array) {
                      if (s.length() > maxLength) {
                          maxLength = s.length();
                          longestString = s;
                      }
                  } 
                  return longestString;
              }
        
              public static void main(String[] args) {
                  String[] toppings = {"Cheeddddddddddse", "Pepperoni", "Black Olivesddd"};
                  String longestString = getLongestString(toppings);
                  System.out.format("longest string: '%s'\n", longestString);
              }
        
        }
        

        【讨论】:

          【解决方案5】:

          一个简单的方法是使用for 循环来读取 5 个名称并找到最大名称的长度。使用for 循环可避免创建 5 个威慑字符串变量。

          如果您以后想使用这些名称,可以使用 String 数组。

          public static void main(String[] args) throws IOException {
              Scanner x = new Scanner(System.in);
              String name = "";
              String maxName = "";
              int maxLength = 0;
          
              System.out.println("enter 5 name :");
          
              for (int i = 0; i < 5; i++) { // read 5 names
                  name = x.nextLine();
                  if (maxLength < name.length()) { // check longest name
                      maxLength = name.length();
                      maxName = name;              // store in temp variable to show
                  }
              }
              System.out.println("Longest name is " + maxName); // print largest name
          }
          

          输出:

          输入5个名字:
          拉吉
          西塔

          慕克吉
          丽塔
          最长的名字是慕克吉

          【讨论】:

            【解决方案6】:

            这是一个适用于任意数量条目的解决方案:

            Scanner x = new Scanner(System.in);
            String name = "", temp="";
            
            while (x.hasNextLine()){
                temp = x.nextLine();
                if (temp.length() > name.length()) name = temp;
            }
            
            System.out.println("Longest is " + name);
            

            您需要Ctrl + Z 在 Windows 上结束 inputStream

            【讨论】:

            • 它不能使用任何数字,因为它甚至不会编译?您如何尝试您的代码?
            • 现在可以编译了。但是您还应该添加有关关闭输入流的信息。由于 OP 似乎很新,她可能不知道。
            【解决方案7】:

            这是我用来比较 3 个输入字符串的长度的代码:

            public static void main(String[] args) {
            
                String string1 , string2 , string3;
            
                Scanner input = new Scanner(System.in);
                System.out.println("Enter three string names to compare");
                string1 = input.nextLine();
                string2 = input.nextLine();
                string3 = input.nextLine();
            
                if (string1.length()>string2.length()) {
                    if (string1.length() > string3.length())
                        System.out.println("String 1 has the longest length , length = "+string1.length());
                }
            
                if (string2.length()>string1.length()){
                    if(string2.length()>string3.length())
                        System.out.println("String 2 has the longest length , length = "+string2.length());
                }
            
                if (string3.length()>string1.length()) {
                    if (string3.length() > string2.length())
                        System.out.println("String 3 has the longest length , length = " + string3.length());
                }
            
            }
            

            【讨论】:

              【解决方案8】:
              //SIMPLE JAVA SOLUTION
              class GFG 
              {
                  String longest(String names[], int n)
               {
                      String res="";
                      for(int i=0;i<n;i++)
                      {
                          if(res.length()<names[i].length())
                          {
                              res=names[i];
                          }
                      }
                      return res;
                      
                  }
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2023-02-03
                • 2021-04-05
                • 1970-01-01
                • 2022-11-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多