您好,我很确定这是一个初学的JAVA问题。我运行了我的编译器,它显示出错误
Cannot make a static reference to the non-static method roll() from the type Die
在我的主要方法的最后一行。
我要做的是掷两个骰子并加起来。我的问题是这条线有什么问题 我该如何解决这个问题?提前致谢
/** main method
Die myDie1 = new Die();
Die myDie2 = new Die();
for(int roll=1;roll<=total;roll++)
{
counts[(Die.roll()+Die.roll())]++; //<--error here
}
**/
骰子方法
public class Die
{
private final int MAX = 6; // maximum face value
private int faceValue; // current value showing on the die
//-----------------------------------------------------------------
// Constructor: Sets the initial face value.
//-----------------------------------------------------------------
public Die()
{
faceValue = 1;
}
//-----------------------------------------------------------------
// Rolls the die and returns the result.
//-----------------------------------------------------------------
public int roll()
{
faceValue = (int)(Math.random() * MAX) + 1;
return faceValue;
}
//-----------------------------------------------------------------
// Face value mutator.
//-----------------------------------------------------------------
public void setFaceValue (int value)
{
faceValue = value;
}
//-----------------------------------------------------------------
// Face value accessor.
//-----------------------------------------------------------------
public int getFaceValue()
{
return faceValue;
}
//-----------------------------------------------------------------
// Returns a string representation of this die.
//-----------------------------------------------------------------
public String toString()
{
String result = Integer.toString(faceValue);
return result;
}
}
答案 0 :(得分:1)
更改行
counts[(Die.roll()+Die.roll())]++;
到
counts[myDie1.roll()+ myDie2.roll()]++;
注意左括号也缺失
答案 1 :(得分:0)
您必须创建Die
类型的对象或创建method static
。也许你应该看看静态类和变量以及java对象及其差异。
一种方法是:
变化:
public int roll()
{
faceValue = (int)(Math.random() * MAX) + 1;
return faceValue;
}
要:
public static int roll()
{
faceValue = (int)(Math.random() * MAX) + 1;
return faceValue;
}
更好的Java OO方式是从
改变for(int roll=1;roll<=total;roll++)
{
counts[(Die.roll()+Die.roll())]++;
}
为:
for(int roll=1;roll<=total;roll++)
{
counts[(myDie1.roll()+myDie2.roll())]++;
}
答案 2 :(得分:0)
您可能只想替换:
counts[(Die.roll()+Die.roll())]++;
使用:
counts[(myDie1.roll()+myDie2.roll())]++;
调用对象上的实例化方法,而不是类
上的未实例化方法答案 3 :(得分:0)
这是因为你将静态方法引用给非静态对象。
根据java你不能调用的方法直接引用。所以你需要将该方法设为静态。所以根据这个改变你的方法。
public static int roll()
{
faceValue = (int)(Math.random() * MAX) + 1;
return faceValue;
}
在您更新后,这将起作用
for(int roll=1;roll<=total;roll++)
{
counts[(Die.roll()+Die.roll())]++; //<--error here will be solved
}
希望这会有所帮助。