试图在不同的Java类

时间:2017-05-03 19:21:59

标签: java tostring

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

  

该类将被称为Temp

     

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

     

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

     

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

     

包含一个显示对象的toString方法,如下所示(假设   第3个创建):

     

对象标识:3温度:F:32.0温度,C:0.0

     

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

     

要明确的是,唯一的方法如下:4个构造函数,getF,   getC,setDegrees,setScale,equals,toString,compareTo和static   getTempCount,返回已经存在的对象总数   创建

     

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

     

请注意,如果温度为,则equals方法将返回true   在摄氏度比较时(相当于十分之一)   度)。

     

一定要充分利用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() );
      }**

    }

2 个答案:

答案 0 :(得分:0)

您对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换行。除非您希望换行符以空格开头,否则不要在它们之后留空。

答案 1 :(得分:0)

您需要格式化程序中的占位符,您的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