[英]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,但这根本不起作用。 我真的很感谢任何帮助。
意见建议:
print()
方法,因为它们除了混淆之外没有其他用途。 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.