为了账号安全,请及时绑定邮箱和手机立即绑定

什么是非静态变量以及如何修复它们

什么是非静态变量以及如何修复它们

梦里花落0921 2023-07-19 17:09:25
我有一个家庭作业,我应该使用 math.random() 模拟掷骰子并将其更改为 int 。我有一个包含 2 个类的文件,并且正在尝试创建一个对象。我的代码编译时出现运行时错误“错误:无法从静态上下文引用非静态变量。” 知道发生了什么。我已将“value”的值更改为整数并成功运行代码。目前还没有想到其他改变。public class DieTester_5AlastiCorrigan {    public static void main(String[] args){        // New object myDie.         Die myDie = new Die();        System.out.println(myDie.roll());        System.out.println(myDie.getValue());    }    // Creates a new Die Class     class Die{        private String value;        public Die( int dieRoll ) {            value = "" + dieRoll;        }        // Roll Method chooses random number between 1 - 7 and makes it    an int.         public int roll() {            int max = 6;            int min = 1;            int range = max + 1;            int dieRoll = (int)Math.random()*range;            //dieRoll = (int)dieRoll;            return dieRoll;        }        // getValue Method returns final value of "value".         public String getValue() {            return value;        }    }}期望控制台打印出数字 1 <= x < 7 作为整数。错误信息:error: non-static variable this cannot be referenced from a static context        Die myDie = new Die();                    ^
查看完整描述

2 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

Die请注意您的班级在班级内的情况DieTester_5AlastiCorrigan。这使得它成为一个非静态内部类。您需要一个 的实例DieTester_5AlastiCorrigan来创建 的实例Die。因此,要解决此问题,只需移至Die顶层,如下所示:


class DieTester_5AlastiCorrigan {

    ...

}


class Die {

    ...

}

或者添加一个static修饰符:


class DieTester_5AlastiCorrigan {

    ...


    static class Die {

        ...

    }

}

但是,您的代码中仍然存在一些错误。Die有一个接受 an 的构造函数int,但是当您创建Die,时Die myDie = new Die();,您没有将 an 传递int给构造函数。我建议您添加一个无参数构造函数:


public Die() {

    this(1);

}

另外,value不应该是 类型String。它应该是一个int,并且从您的用法来看,roll应该更改 的值value而不是返回骰子卷。


查看完整回答
反对 回复 2023-07-19
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

class Die 是类 DieTester_5AlastiCorrigan 的实例变量,这意味着您只能使用 DieTester_5AlastiCorrigan 实例创建 Die 实例。这段代码应该运行:


DieTester_5AlastiCorrigan outerObject = new DieTester_5AlastiCorrigan();

DieTester_5AlastiCorrigan.Die myDie = outerObject.new Die();


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信