试图从另一个类调用方法得到一个错误。 JAVA

时间:2014-10-29 04:46:59

标签: java

您好,我很确定这是一个初学的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;
     }
   }

4 个答案:

答案 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
          } 

希望这会有所帮助。