2016-10-05 6 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

Scanner Objectを使って正しく実行しました... –

+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!あまりにも多くのことが私はすべてを言及していなかったそのコードで間違っている! –

関連する問題