繁体   English   中英

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

[英]Why doesn't the compiler allow this?

因为我拼命寻找解决方案 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");
    }

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

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

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

Buuuut 他们不是。 我不知道为什么。 现在问题出在哪里?

你的帮助是非常受欢迎的,它将帮助我不要在睡梦中对此进行猜谜。

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

例子 :

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM