2011-04-08 134 views
1

我正在製作一個程序,可以判斷評分並給出平均值和我的一個變量,我認爲我做錯了。我得到的錯誤消息:非靜態/靜態變量錯誤

非靜態變量難度不能從靜態上下文中引用
困難= keyboard.nextDouble;

我已經嘗試將它移動到主要方法之上以及向它添加「靜態」,但它似乎仍然給我的問題。還有什麼我能做的嗎?下面是它

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

問題的部分代碼的建議編譯器是您正在使用一個靜態背景下difficulty實例變量(即:不是作爲一個實例的一部分)。你需要做的是,如果你認爲difficulty應該在類CH6PA的所有實例中都是相同的,那麼通過將static關鍵字放在聲明之前,我會將難度設置爲static。

0

你得到這個錯誤的原因是你正在聲明靜態聲明的main方法中的難度字段。但難度被定義爲非靜態的(一個實例字段)。所以困難是CH6PA實例的一部分。但主要方法不是。您只能從實例方法訪問實例變量。

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

這是正確的做法。 – keuleJ 2011-04-08 06:15:26

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) 

而且好運休息!

+0

感謝您的版本。完成lapsus。 ;) – 2011-04-18 14:58:33