【问题标题】:java string toString with condition带有条件的java字符串toString
【发布时间】:2017-01-28 21:35:14
【问题描述】:

我必须编写一个 PhonePlan 对象,该对象将代表客户为其手机制定的计划类型。所以对象必须跟踪 minutesAllowed (int)、minutes used (int)、dataAllowed (int)、data used (int) 和 planType (boolean):

public class PhonePlan {
     int minutesAllowed;
     int minutesUsed;
     int dataAllowed;
     int dataUsed;
     boolean planType;
}

我需要编写一个构造函数,其中包含 minutesAllowed、dataAllowed 和 planType 作为我所做的参数:

public PhonePlan (int ma, int da, boolean pt){
    this.minutesAllowed = ma;
    this.planType = pt;
    this.dataAllowed = da;
}

最后我必须编写一个字符串方法,根据计划的类型显示计划。

我还必须使用以下测试程序测试我的代码;

public class PlanTestProgram {
    public static void main(String args[]) {

        System.out.println(new PhonePlan(200, 2500000, false));
        System.out.println(new PhonePlan(250, 500000, true));
        System.out.println(new PhonePlan(300, 5000000, false));
        System.out.println(new PhonePlan(60, 1000000, false));
        System.out.println(new PhonePlan(30, 0, true));
    }

第一个元素是 minutesAllowed,第二个是 dataAllowed 的数量,第三个是说明 planType 是 true 还是 false。

我尝试了很多不同的方法,但我无法构造一个 toString() 方法来考虑我的 planType 是真还是假...

我的尝试:

public String toString(){ 
    return ( "Regular(" + minutesAllowed + " minute," + dataAllowed 
              + "GB data) Monthly Plan with " 
              + getMinutesRemaining() + " minutes remaining and " 
              + getDataRemaining() + "KB remaining"); 
}

【问题讨论】:

  • 布尔planType 甚至意味着什么?您能否分享您对该程序的期望输出?
  • 你想打印什么?不清楚...
  • 您能否分享您在实现toString 方法时的尝试并解释您对它们不满意的原因?
  • 欢迎来到 Stack Overflow!请使用tour,环顾四周,并通读help center,尤其是How do I ask a good question?What topics can I ask about here?。从第二个链接:“问题[...] 必须包括您的工作总结到目前为止已经解决了这个问题,并描述了你在解决它时遇到的困难。”
  • planType 只是一个变量@Mureinik

标签: java string object tostring


【解决方案1】:

您可以使用 if/else 简写方式轻松地将建议(尝试)toString 方法中的 return 更新为以下内容:

return ("Regular(" + minutesAllowed + " minute," + dataAllowed 
          + "GB data) " + ((PlanType)? "Monthly": "Annual") + " Plan with " 
          + getMinutesRemaining() + " minutes remaining and " 
          + getDataRemaining() + "KB remaining");

【讨论】:

    【解决方案2】:

    Metod toString() 绝不能用于展示对象属性的价值。对于覆盖,您可以使用公共库

    public String toString() {
     return new ToStringBuilder(this).
       append("minutesAllowed", minutesAllowed).
       append("minutesUsed", minutesUsed).
       append("dataAllowed", dataAllowed).
       append("dataUsed", dataUsed).
       append("planType", planType).
       toString();
    }
    

    【讨论】:

      【解决方案3】:

      你可以按照下面的代码实现 toString 方法

      public class PhonePlan {
      int minutesAllowed;
      int minutesUsed;
      int dataAllowed;
      int dataUsed;
      boolean planType;
      public PhonePlan (int ma, int da, boolean pt){
          this.minutesAllowed = ma;
          this.planType = pt;
          this.dataAllowed = da;
      }
      
      
      
      @Override
      public String toString() {
          return planType ? getPlanTypeBasedString("Weekly Plan") : getPlanTypeBasedString("Monthly Plan");
      }
      public String getPlanTypeBasedString(String planType){
          return ( "Regular(" + minutesAllowed + " minute," + dataAllowed
                  + "GB data) "+planType+" with "
                  + getMinutesRemaining() + " minutes remaining and "
                  + getDataRemaining() + "KB remaining");
      }
      

      【讨论】:

      • 不需要测试 if(planType==true) 只需 if(planType) 就可以了。
      • 另外,我不是反对者。你的回答对我来说很好。
      • 我闻到了太多的重复性:o... 将这些重复性拉到中间变量会很好。
      • 你有什么建议? @IvoHrádek
      • 稍作改动并删除了冗余
      猜你喜欢
      • 2010-12-30
      • 2020-05-18
      • 2018-11-02
      • 2010-10-03
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2020-11-09
      • 2014-02-24
      相关资源
      最近更新 更多