如何打印两个单独的重写toString消息

时间:2016-04-13 03:47:32

标签: java double tostring println

在给定特定条件的情况下,有没有办法打印两个不同的重写的toString消息?例如,以下是一个简单示例,如果检查值为0,我需要打印两个不同的错误消息。 我已经覆盖了toString以获得"错误:检查= 0"打印,但我很难显示"错误:双值不精确"。

public class test{
public static void main(String[] args)
{
System.out.println(new Set(1,0)); // Should print "Error: Check = 0"
System.out.println(new Set(1,0).toDouble()); // Should print "Error: Double value not precise"
}
}

// ------------------------------------------
public class Set{
int a;
int check;

Fraction(int a, int check)
{
this.a = a;
this.check = check;
}
// ------------------------------------------
public String toString()
{
if(this.check == 0)
  return "Error: Check = 0";

return (this.a + ":" + this.check);
}
// ------------------------------------------
public double toDouble()
{
double number;

if(this.check != 0)
  number = ((a * check) + (1/3));
else
  number = 0;

return number;
}
// ------------------------------------------
public String toString(double d)
{
return ("" + d);
}
}

3 个答案:

答案 0 :(得分:0)

您的问题可能有几个答案。其中一个是使用你的"检查" flag作为错误的标识符。例如。你已经将值0解释为"错误:检查是0和#34;。类似地,您可以指定值-1或某些值(假设检查只是一个标志并且没有业务重要性。否则您可以定义专用的标志变量来完成此工作)。您可以指定此值-1以根据您的特定条件检入toDouble方法。然后,在toString方法中,首先检查check是否具有值-1。如果为-1,则显示" Double值不精确"错误。否则,如果为0,则显示" Check is 0"错误。如果我不能很好地解释这一点,请告诉我。

答案 1 :(得分:0)

检查

public double toDouble()
{
double number;

if(this.check != 0)
  number = ((a * check) + (1/3));
else
{number=0;
    System.out.println("Error: Double value not precise");}

return number;
}

答案 2 :(得分:0)

您尝试使用的toString()实例方法。每个类都可以声明自己的实例方法。那些实例方法不能被任何其他方法随意覆盖。在您的情况下,由于toDouble()返回double而Java将自动返回""这是Double,您的println会调用toString()中定义的Double方法。 Java中没有办法告诉它"用我选择的一个"替换Double的{​​{1}}方法。使用toString()参数声明toString()肯定不会这样做。

覆盖实例方法的唯一方法(例如此处的double方法)位于子类中。如果toString()不是最终类,您可以定义自己的Double扩展MyDouble的子类,并覆盖Double中的toString()方法。 但您还需要 MyDouble 返回 toDouble() 而不是 {{1} } MyDouble。然后,Double会调用double println,因为它有MyDouble个对象。获取重写实例方法的唯一方法是使用子类的对象,就像这样。对于任何其他toString,此覆盖更改MyDouble。 (但是,toString()标记为Double,因此您无法实际定义自己的子类。)