Java:仅返回null

时间:2015-09-13 00:58:36

标签: java

我对Java很陌生,而且我在分配时遇到了麻烦。出于某种原因,我只是得到了空。我做错了吗?

public class Dieprint
{
   public static void main(String[]args)
   {
      Die die1 = new Die();
      die1.roll();
      die1.toString();
      die1.print();
   }
}

class Die
{
   //instance variables
   private int faceValue;
   private int numSides;
   private String faceValue2;

   //constructor
   public Die()
   {
      numSides = 6;
      faceValue = roll();
   }

   //accessors
   public int getValue() { return faceValue; }

   //mutators
   public int roll()
   {
      faceValue = (int)(Math.random()*numSides + 1);
      return faceValue;
   }
   //methods
   public String toString()
   {
     String faceValue2 = ("" + faceValue);
     return faceValue2;
   }

   public String print()
   {
     System.out.println("Result is: " + faceValue2);
     return faceValue2;
   }
}

我试图让toString方法返回faceValue本身,但这根本不起作用。 我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:0)

建议:

  • 摆脱faceValue2变量 print()方法,因为它们除了混淆之外没有任何其他目的。
  • 而是打印出toString结果:System.out.println(die1);。这将打印出Die的toString方法返回的值。

例如

public class DiePrint {
   public static void main(String[] args) {
      Die die = new Die();
      System.out.println(die);
      die.roll();
      System.out.println(die);
   }
}

class Die {
   private static final int DEFAULT_NUM_SIDES = 6;
   private int faceValue;
   private int numSides;

   // default constructor
   public Die() {
      this(DEFAULT_NUM_SIDES);
   }

   // if numSides can vary, then have a constructor that will
   // allow one to set it.
   public Die(int numSides) {
      this.numSides = numSides;
      roll(); // no need to set numSides when rolling. it's already done
   }

   // accessors should reflect the field name
   public int getFaceValue() {
      return faceValue;
   }

   public int getNumSides() {
      return numSides;
   }

   // mutators
   public int roll() {
      faceValue = (int) (Math.random() * numSides + 1);
      return faceValue;
   }

   // methods
   public String toString() {
      String faceValue2 = ("" + faceValue);
      return faceValue2;
   }

}

答案 1 :(得分:0)

在方法public String toString()中,您所做的是启动一个新变量faceValue2。即使你已经在你的领域中有这个变量,当你写String faceValue2 = {"" + faceValue)(强调单词 String )时,你现在指向另一个名为faceValue2的变量,它不再是faceValue2在你的领域。

如果您浏览代码,则会在print方法中进行打印,其中存在一个名为faceValue2的变量。此变量指向字段中的faceValue2,因为它在toString()方法中尚未更改,因此仍为null。因此,当您打印时,您将获得null。

解决此问题的方法是删除关键字String,制作代码

public String toString(){
     faceValue2 = "" + faceValue;
     return faceValue2;
}

这将保证您更改字段中的变量,从而更改print()方法中的变量,从而更改运行代码后获得的输出。