2016-10-05 63 views
-5

我試圖打印一張表,顯示每季度增加一個簡單興趣的帳戶的值。此方法還需要要求用戶輸入帳戶的原始值,年利率和應計算的年數。java錯誤無法對非靜態字段進行靜態引用v

我不斷收到處理掃描儀以及我使用的雙打和整數的錯誤。

import java.util.*; 

public class Tables { 

    public static final Scanner CONSOLE = new Scanner(System.in); 

    double v; 
    double p; 
    int y; 
    int q; 
    double r; 

    public static void main(String[] args) { 

     System.out.println("Lab 4 written by Leonardo Riojas"); 

     promptString(); 
     outputMethod(); 
    } 

    public static void promptString() { 

     System.out.println("Enter orginial amount"); 
     double p = CONSOLE.nextDouble(); 
     System.out.println("Enter annual interest rate"); 
     double r = CONSOLE.nextDouble(); 
     System.out.println("Enter years"); 
     double y = CONSOLE.nextDouble(); 
    } 

    //dont know where to put this v 
    public static void outputMethod() { 
     for (int i = 1; i <= 4; i++) 
      v = p * (1 + (y - 1 + q/4.0) * r/100); 

     System.out.println(p + "\t"); 
    } 
} 
+0

學習語言,學會閱讀編譯錯誤。它告訴你到底你做錯了什麼。 – jwenting

+0

你用掃描器對象做了正確的... –

+2

[在Java中靜態方法中調用非靜態方法]的可能重複(http://stackoverflow.com/questions/2042813/calling-non-static-method-in -static-method-in-java) –

回答

1

outputMethod是一種靜態方法。這些變量成員不是靜態的,這意味着它們不是由班級持有,而是由班級的實例持有。因此,如果不實例化類Tables的對象,則無法訪問它們。

或者你可以讓他們靜:

class MyClass { 
    public static double v; 
    //... 
    public static void outputMethod() { 
     // You can access v now from here 
    } 
} 
0

只是權宜之計將宣佈所有這些變量爲靜態。

static double v; 
static double p; 
static int y; 
static int q; 
static double r; 

但這通常不是好主意。通常你可能想要傳遞參數你的方法。例如創建準確定義這些變量關係的類,並將該對象傳遞給您的方法並進行操作。但是,如果你只是想讓它的工作如上所述。

+0

此外,'y'被聲明爲'int',但在'promptString()'方法中被賦值爲double。 – PEF

+0

謝謝@PEF!有很多事情是錯誤的,我甚至不想提及所有的代碼! –

相關問題