Java编译器告诉我我没有启动变量"interest"或"pmt"



我正在尝试编写一个摊销计算器,用户可以在其中输入余额值、小数形式的利率值和月付款值。有了这些信息,我想输出一个以美元为单位的利息金额,一个本金金额和一个新的余额。下面是我的代码:

import java.util.Scanner;
public class Amortization{
   public static void main(String []args){
      Scanner pmt, interest, balance = new Scanner(System.in);
      System.out.println("What is your balance?");
      double b = balance.nextDouble();
      System.out.println("What is your interest rate in decimal?");
      double i = interest.nextDouble();
      System.out.println("What is your monthly payment?");
      double p = pmt.nextDouble();
      double pv = p-(b*i);
      System.out.println("Your interest amount is " + (b*i));
      System.out.println("Your principal amount is " + pv);
      System.out.println("Your new balance is " + (b-pv));
   }
}

您不应该声明3个扫描器来读取标准输入。宣布一个,然后继续读下去。这样的:

import java.util.Scanner;
public class Amortization{
   public static void main(String []args){
      Scanner input = new Scanner(System.in);
      System.out.println("What is your balance?");
      double b = input.nextDouble();
      System.out.println("What is your interest rate in decimal?");
      double i = input.nextDouble();
      System.out.println("What is your monthly payment?");
      double p = input.nextDouble();
      double pv = p-(b*i);
      System.out.println("Your interest amount is " + (b*i));
      System.out.println("Your principal amount is " + pv);
      System.out.println("Your new balance is " + (b-pv));
   }
}
这里的要点是,扫描器是从输入流中读取的对象,而不是被读取的值。您不需要为每个想要读取的值都创建新的扫描器。

正如@nhouser9所说,您不需要三个扫描器,并且编译器回答您的问题说没有初始化变量,因为您只初始化了其中的最后一个(余额)。java中的多次初始化不会像你期望的那样起作用(用相同的值初始化所有变量)。

最新更新