为什么编译器不允许这样做?

时间:2017-10-20 20:10:19

标签: java

因为我拼命寻找3小时的解决方案,但没有找到任何东西,我会在这里试一试。

    public static void Assemble(boolean isAnnuityLoan, double K, double P, int N) {

    double loan = K;
    int year = 1;

    Output.PrintHeader();

    if (isAnnuityLoan) {
        double *rpy* = Calculation.AnnRatePerYear(K, P, N);
    } else {
        double *T* = Calculation.AmortRate(N, K);
    }

    for (int x = 0; x < N; x++) {

        double I = Calculation.Interest(loan, P);

        if (isAnnuityLoan) {
            double T = Calculation.AnnAmortRate(**rpy**, loan, P);
        } else {
            double rpy = Calculation.RatePerYear(loan, P, **T**);
        }

        Output.PrintTableLine(year, loan, I, **T**, **rpy**);
        loan = loan - **T**;
        year++;

        System.out.println("\n");
    }

这是代码。哦酷看起来像格式在代码段中不起作用。无论如何,问题是,编译器将斜体变量( K rpy )标记为未使用,并将粗体(双星)标记为未找到。现在这对我没有任何意义,因为我们可以追踪两条路径。

  1. isAnnuityLoan是假的。 itll计算T,然后输入for循环,因为isAnnuityLoan仍为false,else语句将触发并计算rpy。

  2. 反之亦然,首先计算rpy,循环中计算T,因此两个变量都应该可用。

  3. Buuuut他们不是。我不明白为什么。现在问题出在哪里了?

    你的帮助很高,并且可以帮助我在睡梦中不要喋喋不休。

1 个答案:

答案 0 :(得分:0)

  • “rpy”变量在if范围内定义,所以你不能在外面。
  • 要在范围外使用变量,请查看下面的示例。
  • 请注意,警告与错误不同。编译器将编译您的代码,即使它包含警告(如未使用变量)但不包含错误。

示例:

//define var
int x;
if(test){
//initialize it here
    x = 1;
} else {
//or here
    x = 2;
}
//use it here
System.out.println(x);