猿问

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

我有一个家庭作业,我应该使用 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();

                    ^


梦里花落0921
浏览 104回答 2
2回答

RISEBY

Die请注意您的班级在班级内的情况DieTester_5AlastiCorrigan。这使得它成为一个非静态内部类。您需要一个 的实例DieTester_5AlastiCorrigan来创建 的实例Die。因此,要解决此问题,只需移至Die顶层,如下所示:class DieTester_5AlastiCorrigan {&nbsp; &nbsp; ...}class Die {&nbsp; &nbsp; ...}或者添加一个static修饰符:class DieTester_5AlastiCorrigan {&nbsp; &nbsp; ...&nbsp; &nbsp; static class Die {&nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; }}但是,您的代码中仍然存在一些错误。Die有一个接受 an 的构造函数int,但是当您创建Die,时Die myDie = new Die();,您没有将 an 传递int给构造函数。我建议您添加一个无参数构造函数:public Die() {&nbsp; &nbsp; this(1);}另外,value不应该是 类型String。它应该是一个int,并且从您的用法来看,roll应该更改 的值value而不是返回骰子卷。

红糖糍粑

class Die 是类 DieTester_5AlastiCorrigan 的实例变量,这意味着您只能使用 DieTester_5AlastiCorrigan 实例创建 Die 实例。这段代码应该运行:DieTester_5AlastiCorrigan outerObject = new DieTester_5AlastiCorrigan();DieTester_5AlastiCorrigan.Die myDie = outerObject.new Die();
随时随地看视频慕课网APP

相关分类

Java
我要回答