【问题标题】:trying to call a toString method in different Java Class尝试在不同的 Java 类中调用 toString 方法
【发布时间】:2017-10-01 18:35:57
【问题描述】:

任务是创建一个名为 Temp 的课程,该课程与他免费提供给我们的讲师 TestTemp 课程运行。到目前为止,一切似乎都测试得很好,除了我应该使用的 toString 中的输出。它应该像注释掉的部分一样格式化,但似乎不起作用。我提出了 TestTemp 类和我的 Temp 类代码。我觉得我错过了一些小东西,但只需要朝着正确的方向轻推,而且我的导师在作业到期之前没有办公时间。我还粘贴了他在作业中添加的作业说明。

该类将被称为 Temp

添加一个 compareTo 方法。 (如果调用对象具有较低的值,则返回 -1 temp,相同为0,较大为1)

添加一个静态计数器(对象 id)来跟踪有多少温度 对象已创建(1,2,3,...)

添加一个静态方法来告诉你有多少温度对象 创建的。

包括一个 toString 方法,该方法显示对象如下(假设 第三个创建):

对象 ID:3 F 中的温度:32.0 C 中的温度:0.0

请注意,调用 getF 或 getC 只返回值。他们不 更改本机数据。

要明确,唯一的方法如下:4个构造函数,getF, getC、setDegrees、setScale、equals、toString、compareTo 和一个静态 getTempCount 返回已被访问的对象总数 已创建。

请注意,getter 将返回所请求比例的度数 四舍五入到十分之一度。永远不要四舍五入原生数据。

请注意,如果温度为 以摄氏度比较时相同(四舍五入到十分之一 学位)。

一定要充分利用 this() 并且只有一个构造函数来做 任何真正的工作。

如果“不好”,请务必验证比例并遵循默认值 (C) 规模”发送在

无需验证学位和担心诸如此类的事情 绝对零等等。

注意:您的 Temp 类必须与 TestTemp 类一起正常工作 在 UNIT-04-CodeSamples 中提供

     //32 - 212  180 ticks
//
//0-100  1/10
// 

    public class TestTemp
    {
      public static void main(String [] args)
      {
         // only one constructor does any real work
         Temp temp1 = new Temp();         // 0  C
         Temp temp2 = new Temp(32);       // 32 C
         Temp temp3 = new Temp('F');      // 0  F
         Temp temp4 = new Temp(32, 'F');  // 32 F

         Temp temp5 = new Temp(); // 0 C
         temp5.setDegrees(10);
         temp5.setScale('F');     // 10 F

         System.out.println("C: " + temp1.getC() ); // C: 0.0
         System.out.println("F: " + temp1.getF() ); // F: 32.0

         System.out.println(temp1.equals(temp4)); // true

         System.out.println(temp1.equals(temp2)); // false

        System.out.println("You have " + Temp.getTempCount() ); // You have 5  

         if( temp3.compareTo(temp5)< 0 ) //temp3 is lower than than temp5
         {
            System.out.println("temp3 is lower than than temp5");
         }
         else
         {
            System.out.println("temp3 is same or larger than temp5");
         }
         System.out.println(temp1);

         /*
            TEMP OBJECT #1
            IN C:  0.0
            IN F: 32.0

         */
      }
    }

    public class Temp implements Comparable<Temp>
    {
      private double degrees;
      private char scale;
      private static int tempCount = 0;
      private int id;

      public Temp()
      {
          this.degrees = 0;
          this.scale = 'C';
    //    this(0.0, 'C');
      }
      public Temp(double degrees)
      {
          this.degrees = degrees;
          this.scale = 'C';
    //    this(degrees, 'C');
      }
      public Temp(char scale)
      {
          this.degrees = 0;
          this.scale = scale;
    //    this(0.0, scale);
      }
      public Temp(double degrees, char scale)
      {
          this.id = ++tempCount;
          this.degrees = degrees;
          this.scale = scale;
          //(degrees, scale);
      }

      public static int getTempCount()
      {
          return tempCount;
      }
      public int getId()
      {
          return this.id;
      }
      public void setScale(char scale)
      {
          if(scale == 'C')
          {
              this.scale = scale;
          }
          else
          {
              this.scale = 'F';
          }
      }
      public void setDegrees(double degrees)
      {
          this.degrees = degrees;
      }
      public double getC()
      {
          if(scale == 'C')
          {
              return degrees;
          }
          else
          {
              return (double)(5.0 * (degrees-32)/9.0);
          }
      }
        public double getF()
        {
            if(scale == 'F')
            {
                return (double) degrees;
            }
            else
            {
                return (double)(9.0*(degrees)/5.0)+32;
            }
        }
        @Override
        public int compareTo(Temp obj) 
        {
            if(this.getC() < obj.getC() )
            {
                return -1;
            }
            if(this.getC() > obj.getC() )
            {
                return 1;
            }
            return 0;
        }   
      public boolean equals(Object obj)
      {
          if(!(obj instanceof Temp))
          {
              return false;
          }
          Temp other = (Temp)obj;
          return this.getC() == other.getC();
      }
      **public String toString()
      {
          return String.format("TEMP OBJECT ", this.id) + "\n" +
                 String.format("IN C: ", this.getC() ) + "\n" +
                 String.format("IN F: ", this.getF() );
      }**

    }

【问题讨论】:

  • 阅读完所有这些后,我仍然不知道您的问题到底是什么。请创建一个 [最小、完整且可验证的示例] (stackoverflow.com/help/mcve) 并描述问题以及预期结果

标签: java tostring


【解决方案1】:

您对 String.format 的使用不需要多次创建。只用一个。

return String.format("TEMP OBJECT: $d, %nIN C: %.2f, %nIN F: %.2f", this.id, this.getC(), this.getF());

通过将小数点 %.2f 后的值更改为 %.5f 来修改浮点的精度,例如将打印 0.00000 而不是 0.00。

如果您对格式的使用有任何疑问,我建议您也阅读它的文档,看看它还能做什么。 Link

编辑:添加了换行符。忘了提到只是把%n 换行。不要在它们之后使用空格,除非您希望换行符以空格开头。

【讨论】:

  • 感谢您提醒我要小数位,因为这是作业的一部分。我喜欢你用于字符串的代码,但它使用了我们在课堂上还没有学过的代码,所以我实际上会因为使用它而被标记下来,即使将所有这些作为一行来做是有意义的。
  • 正在使用的代码的哪一部分不是您使用的?我看到您正在使用 format() ,为什么您的教授会按预期使用函数?它确实与您实现的并没有太大不同,但它连接了流程并执行相同的流程,对吗?嗯...我很遗憾听到,也许你可以和你的教授核实一下这个实现?
  • 我认为我们不能使用他没有教给我们的代码的原因是因为这让他更容易分辨谁在作弊。就像这是对 java 类的介绍,所以如果我突然知道他还没有教过我们的代码,那么它更有可能被复制到某个地方,这是作弊。我认为这也使评分更容易,但下次我在实验室时会提出来,看看是否允许这样做。不管怎样,它仍然很有帮助,所以再次感谢您的帮助。
【解决方案2】:

您需要格式化程序中的占位符,您的toString 方法应该是这样的

public String toString()
      {
          return String.format("TEMP OBJECT %d", this.id) + "\n" +
                 String.format("IN C: %.2f", this.getC() ) + "\n" +
                 String.format("IN F: %.2f", this.getF() );
      }

这里%d 用于整数,%f 用于小数。 .2f 将小数位数限制为 2。查看更多示例 here

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    相关资源
    最近更新 更多