非静态/静态变量错误

时间:2011-04-08 05:48:13

标签: java static

我正在制作一个程序,可以取得判断分数并给出平均值和我的一个变量,我认为我做错了。我收到错误消息:

  

非静态变量难度不能从静态上下文中引用   difficulty = keyboard.nextDouble;

我已经尝试将它移到main方法之上以及添加“static”但它似乎仍然给我带来了问题。我还能做些什么吗?这是代码的一部分

import java.util.Scanner;
public class CH6PA
{
private double difficulty;
private int score;
private double[] average;

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

    do
    {
        System.out.println("Enter the level of difficulty (1.2-3.8)");
    difficulty = keyboard.nextDouble;
    }
        while (difficulty>1.2 || difficulty<3.8);


    int judge = new int[7];


    for(int i = 0; i<judge.length; i++)
    {

5 个答案:

答案 0 :(得分:4)

其他答案是将事物改变为静态,你应该避免在静态变量中有可变状态,这是编程的一部分 - 它本质上是全局变量。

import java.util.Scanner;
public class CH6PA
{
private double difficulty;
private int score;
private double[] average;

public static void main(String[]args)
{
    CH6PA ch6pa = new CH6PA();
    ch6pa.doSomething();
}

private void doSomething() {
    Scanner keyboard = new Scanner (System.in);

    do {
        System.out.println("Enter the level of difficulty (1.2-3.8)");
        difficulty = keyboard.nextDouble;
    } while (difficulty>1.2 || difficulty<3.8);

    int judge = new int[7];

    for(int i = 0; i<judge.length; i++) {
    }

答案 1 :(得分:1)

小心do { } while();。你的情况总是true,创造一个无限循环:

     while (difficulty>1.2 || difficulty<3.8)

前:

    1.0 (false || true ) => true

    4.0 (true || false ) = > true

    2.0 (true || true) => true

相反,请将您的条件定义为:

    while (difficulty<1.2 || difficulty>3.8)

祝其他人好运!

答案 2 :(得分:0)

编译器建议的问题是您在静态上下文中使用difficulty实例变量(即:不作为实例的一部分)。您需要做的是,如果您认为difficulty在类CH6PA的所有实例中都应该相同,那么我会通过在声明中将static关键字放在它之前将其设置为静态。 / p>

答案 3 :(得分:0)

您收到此错误的原因是您在main方法中引用了一个声明为static的难度字段。但难度被定义为非静态(实例字段)。因此难度是CH6PA实例的一部分。但主要方法不是。您只能从实例方法中访问实例变量。

答案 4 :(得分:0)

正如Reseter上面所说,你的难度变量应该被声明为静态,因为你的静态方法无法访问非静态属性。

您可以在此处找到完整说明: http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html