toString方法打印空变量,无法理解为什么(Java)

时间:2014-01-21 15:25:06

标签: java tostring

我在这里找不到任何帮助,所以我只想问。

public  Ride(String n, int tr, double hr , int nr){
    String name = n;
    int ticketsRequired = tr;
    double heightRequirement = hr;
    int numberOfRiders = nr;
}

public String toString(){

    String info;

    info = this.name + " Requiring " + this.ticketsRequired + 
            " tickets with a height restriction of " +       heightRequirement;

    return info;
}

这是一次类,然后我尝试通过这个在我的包中的另一个程序中的main方法中调用它:

r1 = new Ride("Death run",0, 5.2, 5);
System.out.println( r1.toString());

将返回此

null Requiring 0 tickets with a height restriction of 0.0

我确信我错过了一些简单但却让我疯狂的事情。

3 个答案:

答案 0 :(得分:13)

你的构造函数中有shadowing个实例变量:

public Ride(String n, int tr, double hr , int nr){
    name = n;
    ticketsRequired = tr;
    heightRequirement = hr;
    numberOfRiders = nr;
}

这里不需要在构造函数中使用this字段,但这是一个很好的实践,因为它们经常被构造函数的参数遮蔽(参见using the this keyword)。

以下是使用this关键字的版本:

public Ride(String n, int tr, double hr , int nr){
    this.name = n;
    this.ticketsRequired = tr;
    this.heightRequirement = hr;
    this.numberOfRiders = nr;
}

答案 1 :(得分:3)

您正在处理变量,如果它们是实例变量,但是您已在构造函数内部声明它们。因此,一旦它超出了你在(构造函数)声明它们的范围,String对象的值将为null,int和double变量的值将为0(因为它是默认值)

答案 2 :(得分:0)

我认为这就是你想要的课程定义:

public class Ride
{
  String name;
  int ticketsRequired;
  double heightRequirement;
  int numberOfRiders;

  public  Ride(String n, int tr, double hr , int nr){
    name = n;
    ticketsRequired = tr;
    heightRequirement = hr;
    numberOfRiders = nr;
  }

  public String toString(){

    String info;

    info = this.name + " Requiring " + this.ticketsRequired + 
        " tickets with a height restriction of " + this.heightRequirement;

    return info;
  }
}

编辑:修复了代码段中的小问题