我正在制作一个程序,可以取得判断分数并给出平均值和我的一个变量,我认为我做错了。我收到错误消息:
非静态变量难度不能从静态上下文中引用 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++)
{
答案 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