我对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本身,但这根本不起作用。 我真的很感激任何帮助。
答案 0 :(得分:0)
建议:
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;
}
}
答案 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()方法中的变量,从而更改运行代码后获得的输出。