【问题标题】:Program won't always print out the longest string程序不会总是打印出最长的字符串
【发布时间】:2017-07-28 19:39:07
【问题描述】:

我在下面的代码中尝试做的是让用户输入两个单独的字符串,我知道我使用了名字和姓氏,但忽略了它。所以用户输入两个字符串,它应该打印最长的字符串。 我的程序并不总是这样做。我需要进行哪些更改才能使其正常工作?

import java.util.Scanner;

 public class Q2
  {

    public static void main(String args [])
    {
    Scanner keyboardIn = new Scanner(System.in);
    String Fname;
    String Lname;

    System.out.print("Please enter first name: ");
    Fname=keyboardIn.nextLine();

    System.out.print("Please enter last name: ");
    Lname=keyboardIn.nextLine();

  if(Fname.compareTo(Lname) < 0)
  {
     System.out.println(Lname + " Is longest ");
  }
  else if(Fname.compareTo(Lname) > 0)
  {
     System.out.println(Fname + " Is longest ");
  }
 }
}

【问题讨论】:

  • compare 方法不(仅)比较长度。字符串有一个length 方法,可以做你想做的事。
  • 当字符串长度相等时,您还必须确定预期的结果。
  • 无关:阅读 Java 命名约定。变量名采用驼峰命名法。
  • 你可以接受这个答案stackoverflow.com/questions/45381201/…希望它能解决你的问题。

标签: java jgrasp


【解决方案1】:

你应该使用长度

import java.util.Scanner;

public class Q2 {

    public static void main(String args[]) {
        Scanner keyboardIn = new Scanner(System.in);
        String Fname;
        String Lname;

        System.out.print("Please enter first name: ");
        Fname = keyboardIn.nextLine();

        System.out.print("Please enter last name: ");
        Lname = keyboardIn.nextLine();

        if (Lname.length() > Fname.length()) {
            System.out.println(Lname + " Is longest ");
        } else if (Fname.length() > Lname.length()) {
            System.out.println(Fname + " Is longest ");
        } else {
            // Both are of same length
        }
    }
}

【讨论】:

    【解决方案2】:

    这是错误的

    if(Fname.compareTo(Lname) < 0)
      {
         System.out.println(Lname + " Is longest ");
      }
    

    字符串有一个 length,这是您需要使用的,以便通过检查字符数来比较 firstlastname正在定义它

    为什么会这样

    Fname.compareTo(Lname)
    

    因为结果没有考虑字符串上的字符数

    【讨论】:

    • 这不能回答 OP 的问题。这应该是一条评论。
    【解决方案3】:

    您正在比较字符串,而不是它们的长度。 您的代码应更改为:

      if(Fname.length() < LName.length())
      {
         System.out.println(Lname + " Is longest ");
      }
      else if(Fname.length() > LName.length())
      {
         System.out.println(Fname + " Is longest ");
      }
    

    我建议也添加一个平等的案例,检查Fname.length() == LName.length()

    【讨论】:

    • 感谢大家的精彩回答。我现在意识到我不需要使用 compareTo,我只需要使用 .length()。感谢您的所有意见。
    • @MarkDoherty 很高兴它有帮助。请接受答案以表明您的问题已解决
    【解决方案4】:

    我建议不要使用 compareTo 方法,而是使用 length 方法。这使您可以直接更轻松地比较字符串长度。

    以下面的语句为例:

    if (Fname.length() > Lname.length()){
      System.out.println(Fname + " Is longest ");
    }
    

    【讨论】:

      【解决方案5】:

      Java compareTo() 方法按字典顺序比较字符串。我认为一个好方法是使用 length() 方法。请看下面的代码

      if(Fname.length()<Lname.length())
      {
         System.out.println(Lname + " Is longest ");
      }
      else 
      {
         System.out.println(Fname + " Is longest ");
       }
      

      我不确定当字符串长度相等时你想做什么。所以,请务必检查那个案例。

      【讨论】:

      • 平等怎么样
      • 当你发表评论时我正在输入它。
      猜你喜欢
      • 2016-06-14
      • 1970-01-01
      • 2022-11-20
      • 2021-02-16
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多