该任务是创建一个名为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() );
}**
}
答案 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