繁体   English   中英

Java:仅返回null

[英]Java: Only returns null

我是Java的新手,在分配作业时遇到麻烦。 由于某种原因,我只会得到null。 我做错了什么吗?

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,但这根本不起作用。 我真的很感谢任何帮助。

意见建议:

  • 摆脱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;
   }

}

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

如果遍历代码,则打印将在您的打印方法中进行,该方法中存在一个名为faceValue2的变量。 此变量指向您字段中的faceValue2,因为它在toString()方法中未更改,所以仍为null。 因此,当您打印时,将得到null。

您可以做的就是解决这个问题,只需删除关键字String,即可编写代码

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

这将确保您正在更改字段中的变量,这又将更改print()方法中的变量,因此,将更改在运行代码后获得的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM