java错误无法对非静态字段v进行静态引用

时间:2016-10-05 17:19:34

标签: java

我正在尝试打印一张表格,显示每季度增加简单利息的帐户的价值。此方法还需要要求用户输入帐户的原始值,年利率以及应计算的年数。

我一直在处理扫描仪和我使用的双打和整数时遇到错误。

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");
    }
}

2 个答案:

答案 0 :(得分:1)

outputMethod是一种静态方法。这些变量成员不是静态的,这意味着它们不是由类保持,而是由类的实例保存。因此,如果不实例化类Tables的对象,则无法访问它们。

或者你可以让它们变成静态的:

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

答案 1 :(得分:0)

快速解决方法是将所有变量声明为静态。

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

但这通常不是好主意。通常,您可能希望传递方法的参数。例如创建准确定义这些变量关系的类,并将该对象传递给您的方法并操纵该方法。但是,如果您只是想让它按上述方式工作。