【问题标题】:Returning string in java using 3 parameters使用3个参数在java中返回字符串
【发布时间】:2013-10-22 12:27:03
【问题描述】:

需要写一个方法 describePerson() 接受 3 个参数,一个 String 给出一个人的 name,一个布尔值,表示他们的性别(女性为 true,男性为 false),以及一个表示年龄的整数。该方法应返回格式如下例所示的字符串:

云雀是女性。她今年 2 岁。 或者 杰是男的。他1岁。

我不确定如何正确编写它(我的代码):

int describePerson(String name, boolean gender, int age) {
    String words="";
    if(gender==true)  return (name + "is "+gender+". "+"She is"+age+ "years old.);
    else
        return (name + "is "+gender+". "+"She is"+age+ "years old.);

} 

结果“年”和“年”也不同,但我不知道如何使它正确..

【问题讨论】:

  • 我认为将int describePerson 更改为String describePerson 将是一个好的开始
  • "该方法应该返回一个字符串" 那你为什么让它返回一个int?
  • 继续嵌套你的 if 语句。有更聪明的方法可以做到这一点,但在这种情况下简单是好的。 (并且该方法应该返回 String,而不是 int。)

标签: java


【解决方案1】:

describePerson 的返回值应该是String 类型。另外,布尔值gender不是字符串,需要自己在return语句中写表达式。

String describePerson(String name, boolean gender, int age) {
    String yearString = (age == 1 ?  "year" : "years");

    if (gender) return (name + " is female. She is " + age + year + " old.");
    else return (name + " is male. He is " + age + year + " old.");
} 

除了描述的其他问题,请务必记住以" 结束字符串。

【讨论】:

  • 加上第三个“其他”性别的返回声明!喜欢那个代码。
  • 确实如此。我可能应该摆脱它,因为某些事情只能是真或假。
  • 我怎样才能得到输出不仅是“年”,还有“年”?例如,他今年 1 岁。不是 1 个“年”
  • 请注意,通常的约定是说“0 岁”而不是“0 岁”,所以比较应该是 == 1> 1
【解决方案2】:

尝试对性别使用“三元”或“条件运算符”。您想输出“男性”或“女性”,而不是“真”或“假”,只需将布尔值附加到字符串即可。

假设“真”是女性:

String genderStr = (gender ?  "female" : "male");
String pronoun = (gender ?  "She" : "He");

是的,您可能想要返回 String 而不是 int。

【讨论】:

    【解决方案3】:

    首先,如果你想返回一个String,你的返回类型应该是String 所以方法签名应该是

    String describePerson(String name, boolean gender, int age)
    

    另外你需要根据性别打印他和她,所以必须有一个if条件。 尝试使用以下代码代替您现有的方法

    String describePerson(String name, boolean gender, int age) {
        String genderStr=null;
        String genderPro = null;
        String year = null;
        if(gender){
            genderStr = "female";
            genderPro = "She";
        }
        else{
            genderStr = "male";
            genderPro = "He";
        }
        if (age == 1) {
                       year = "year";
                     }
                     else {
                       year = "years";
                     }
        return (name + " is "+genderStr+". "+genderPro+" is "+age+ " "+ year+" old");
        } 
    

    【讨论】:

    • 看起来有点眼熟。
    【解决方案4】:

    试试这个

    public String describePerson(String name, boolean gender, int age) {
        String describe = "%s is %s. %s is %d years old.";
        boolean isFemale = gender == true;
        String sexGender = isFemale  ? "female" : "male";
        String sexType = isFemale  ? "She" : "He";
        String finalDescribe = String.format(describe, name, sexGender, sexType, age);
        System.out.println(finalDescribe);
        return finalDescribe;
    }
    

    【讨论】:

    • 好方法,但代码格式应该改进,result-variable应该叫做'result',格式变量应该叫做'format','pattern'或者'template',boolean == true是多余的,并且方法中没有println
    • 请注意gender == true 是多余的。
    【解决方案5】:

    由于您要返回一个字符串,因此您需要将返回类型更改为 String

    String describePerson(String name, boolean gender, int age) {
        String words="";
        if(gender==true)  return (name + "is "+gender+". "+"She is"+age+ "years old.);
        else
            return (name + "is "+gender+". "+"She is"+age+ "years old.);
    
    } 
    

    【讨论】:

      【解决方案6】:

      对您而言,最好的方法可能是预先计算语句的各个部分,然后将它们放在一起:

      String maleFemale;
      String heShe;
      String yearYears;
      
      if (gender) {
        maleFemale = "female";
        heShe = "She";
      }
      else {
        maleFemale = "male";
        heShe = "He"
      }
      if (age == 1) [
        yearYears = "year";
      }
      else {
        yearYears = "years";
      }
      return name + " is " + maleFemale + ". " + heShe + " is " + age + " " + yearYears + " old.";
      

      通常最好像这样把事情分解成你理解的部分,而不是尝试使用你不理解的花哨的操作,紧紧地粘在一起到你无法遵循程序流程的地方,并在其中添加 println 语句- 操作之间。

      【讨论】:

      • 老实说,我发现@Jayasagar 的答案或三个三元/条件运算符比这更简洁明了。我主要避免“没有价值的声明”和“在单独的行上”的风格,除了大的 if-else 树。垂直简洁很重要,因为研究发现算法的最大可理解大小约为一个垂直页面。
      • OTOH,有趣的零件变量命名方法——似乎可行且系统化,我一直对此感兴趣。我的方法通常是“genderStr”、“pronoun”、“yearPlural”或类似的,在某些方面你的方法肯定会更清晰。
      • @ThomasW - 是的,如果是对我来说,我会使用三元运算符,但它们会让新手感到困惑,所以对于这种情况,我跳过了它们。以上内容足够紧凑。而且,在我 40 年的编程生涯中,我发现单独一行的 else 比将它们放在一起更不容易出错且更易于阅读。
      • 感谢您的 cmets :)
      【解决方案7】:

      1:使用String.format

      2:引入变量heShe

      string describePerson(String name, boolean gender, int age) 
      {
          String x = gender ? "She" : "He";
      
          return (name + "is "+gender+". " + x + " is"+age+ "years old.);
      } 
      

      3:参数gender是布尔型,最好是使用枚举

      【讨论】:

      • 您是指string 还是String?另外,我认为被退回的String 存在一些问题......正如所写,它会产生类似“Foois true. She is42years old.”的内容。
      • 不是我的反对意见,但我通常避免分配一个值,然后有条件地覆盖它的风格。 words 变量在这里似乎也是多余的 - 如果使用它,它应该命名为 result
      • @jason - 感谢您的反馈..(所以你也应该给其他人 -1 ,因为也会犯这个“错误”)
      • @lordkain 我无意冒犯。您给出的答案有几个问题,这些问题会让 Java 新手开发人员感到困惑或误导。我可以(恭敬地)在 cmets 中给你反馈,或者我可以编辑你的帖子(然后必须审查和批准)以纠正错误。无论哪种方式,编辑都可能导致投反对票的人改变他们的投票......
      猜你喜欢
      • 1970-01-01
      • 2013-03-29
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多