【问题标题】:Java, non-static cannot be reference to static contextJava,非静态不能引用静态上下文
【发布时间】:2015-09-15 20:50:41
【问题描述】:

在 UNI atm 学习 Java 课程,但我遇到了一些骰子问题。

我有以下几点:

 public class Die {
   public int eyes;
   private java.util.Random r;
   private int n;

   public Die (int n) {
     r = new Random();
     this.n = n;
   }

   public void roll() {
     eyes = r.nextInt(Die.n);
   }

编译时我得到:非静态变量 n 不能从静态上下文中引用。我将如何解决这个问题,同时让它从用户给定的值随机化?

【问题讨论】:

标签: java static non-static


【解决方案1】:

n 不是静态变量,因此不能以静态方式引用它(Die.n)。

由于它是Die类中的实例变量,而您在Die类中引用它,您可以使用n而不是Die.n

【讨论】:

  • 非常感谢!不过,这并不能完全解决问题,因为我在终端中得到 java.lang.NullpointerException: null, 。
  • 你怎么打电话给roll()?您应该使用Die die = new Die(6);(或您想要的任何数字)创建一个新的Die 对象,然后调用die.roll();
  • 我可能还会使用r.nextInt(n) + 1,否则你可能会得到 0,这对于骰子来说没有意义。
  • 在构造函数中添加了Die die = new Die();,仍然得到空指针
  • Die die = new Die(); 行无法编译,因为您没有 Die 类的无参数构造函数。
【解决方案2】:

删除

Die.n

把它改成简单的

n

如果n 被声明为static,您可以同时使用这两种表示法,即使第一种是多余的(因为您来自包含类的内部)

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 2021-03-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多