Java 非静态/静态变量错误

Java 非静态/静态变量错误,java,static,Java,Static,我正在制作一个程序,可以计算评委的分数,给出一个平均值和一个我认为我做错了的变量。我收到错误消息: 无法从静态上下文引用非静态变量难度 难度=键盘.nextDouble 我试着将它移到主方法之上,并在其中添加“static”,但它似乎仍然会给我带来问题。还有什么我能做的吗?下面是它的部分代码 import java.util.Scanner; public class CH6PA { private double difficulty; private int score; private do

我正在制作一个程序,可以计算评委的分数,给出一个平均值和一个我认为我做错了的变量。我收到错误消息:

无法从静态上下文引用非静态变量难度
难度=键盘.nextDouble

我试着将它移到主方法之上,并在其中添加“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++)
    {
import java.util.Scanner;
公共级CH6PA
{
私人双重困难;
个人智力得分;
私人双[]平均值;
公共静态void main(字符串[]args)
{
扫描仪键盘=新扫描仪(System.in);
做
{
System.out.println(“输入难度等级(1.2-3.8)”;
难度=键盘.nextDouble;
}

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

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

出现此错误的原因是您引用了我使用的main方法中的难度字段s声明为静态。但难度定义为非静态(实例字段)。因此,难度是CH6PA实例的一部分。但主方法不是。您只能从实例方法访问实例变量。

出现此错误的原因是您正在引用主方法中声明为静态的难度字段。但难度定义为非静态(实例字段)。所以困难是CH6PA实例的一部分。但主要方法不是。您只能从实例方法访问实例变量。

其他答案是将事物更改为静态,您应该避免在静态变量中具有可变状态。这是编程的101个方面-本质上是全局变量

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++) {
    }
import java.util.Scanner;
公共级CH6PA
{
私人双重困难;
个人智力得分;
私人双[]平均值;
公共静态void main(字符串[]args)
{
CH6PA CH6PA=新的CH6PA();
ch6pa.剂量测定();
}
私人无效剂量(){
扫描仪键盘=新扫描仪(System.in);
做{
System.out.println(“输入难度等级(1.2-3.8)”;
难度=键盘.nextDouble;

}虽然(难度>1.2 | |难度其他答案都是关于将事物更改为静态的,但是您应该避免在静态变量中使用可变状态这是编程的101个方面-它本质上是全局变量

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++) {
    }
import java.util.Scanner;
公共级CH6PA
{
私人双重困难;
个人智力得分;
私人双[]平均值;
公共静态void main(字符串[]args)
{
CH6PA CH6PA=新的CH6PA();
ch6pa.剂量测定();
}
私人无效剂量(){
扫描仪键盘=新扫描仪(System.in);
做{
System.out.println(“输入难度等级(1.2-3.8)”;
难度=键盘.nextDouble;

}尽管(难度>1.2 | |难度)如重置者所述,您的难度变量应声明为静态变量,因为您的静态方法无法访问非静态属性

您可以在这里找到完整的解释:

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

您可以在这里找到完整的解释:

小心使用
do{}while();
。您的条件将始终为
true
,从而创建一个无休止的循环:

     while (difficulty>1.2 || difficulty<3.8)
相反,将您的条件定义为:

    while (difficulty<1.2 || difficulty>3.8)
while(困难3.8)

祝其余的人好运!

小心
do{}while();
。你的情况将永远是
真的
,产生一个无休止的循环:

     while (difficulty>1.2 || difficulty<3.8)
相反,将您的条件定义为:

    while (difficulty<1.2 || difficulty>3.8)
while(困难3.8)
祝其他人好运