为什么我收到此错误?无法从静态上下文引用非静态变量randomNumbers

时间:2018-04-16 07:09:19

标签: java methods

我知道有很多像这样的问题,但它并没有真正帮助我。我必须编写一个程序,帮助小学生学习乘法。使用SecureRandom对象生成两个正的一位数整数。然后程序应该向用户提示一个问题,例如“6次7多少?”我已经完成了困难的部分,但我不能让我的类中的变量适用于其他方法。我将“获取非静态变量randomNumbers不能从静态上下文引用”错误!请有人帮帮我!!

http://

1 个答案:

答案 0 :(得分:1)

问题

错误是

  无法从静态上下文

引用

非静态变量randomNumbers

这意味着,因为你声明randomNumbers就像这样

public class computerAssistedInstruction {
     Random randomNumbers = new Random();
     int answer;
}

您无法在静态方法中使用它(或answer

public static void newQuestion(){     ... }

解决方案

要么设置randomNumbersanswer个静态变量,要么使newQuestion成为实例方法(即不是static),如下所示:

public class computerAssistedInstruction {
     Random randomNumbers = new Random();
     int answer;

     ...

     public void newQuestion() {
          ...
     }
}

现在,您需要稍微编辑main方法,因为在没有类的实例的情况下无法调用非静态方法。所以,而不是

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    int input;

    newQuestion();
    input = scnr.nextInt();

    if (input != answer) {
        System.out.println("No. Please try again.");
    }
    else {
        System.out.print("Very Good!");
        newQuestion();
    }
}

你现在需要这个:

public static void main(String[] args) {
    computerAssistedInstruction instance = new computerAssistedInstruction(); // Create an instance of the class here.
    Scanner scnr = new Scanner(System.in);
    int input;

    instance.newQuestion(); // Call newQuestion() on the instance.
    ^^^^^^^^^^^^^^^^^^^^^^^

    input = scnr.nextInt();

    if (input != answer) {
        System.out.println("No. Please try again.");
    }
    else {
        System.out.print("Very Good!");
        instance.newQuestion();
        ^^^^^^^^^^^^^^^^^^^^^^^
    }
}