2014-09-22 95 views
1

我已经搜索了所有的谷歌,在这里,无法弄清楚为什么我的计算器不工作。看起来,我所有的变量和双打都是在某个时候声明和调用的,但它总是说“找不到符号”。这适用于变量P,Y和R.有人可以帮忙吗?这里是我的代码:试图使一个贷款计算器,找不到符号

import java.util.Scanner; 

public class Carloan { 
    public static void main(String[] args){ 

     int r = R/1200; 
     double n = 12 * Y;   
     double payment = (P * r)/(1 - Math.pow(1+r, -n)); 
     double interest = payment * n - P; 
     int P; 
     int Y; 
     double R; 

     Scanner input = new Scanner (System.in); 

     //double P; 
     System.out.println("Enter loan amount: $" + P); 

     P = input.nextInt(); 

     //double Y; 
     System.out.println("Enter number of years: " + Y); 

     Y = input.nextInt(); 

     //double R; 
     System.out.println("Enter interest rate: %" + R); 

     R = input.nextDouble(); 

     System.out.println("Monthly payments = " + payment); 
     System.out.println("Total interest = " + interest); 

    } 
} 
+2

你的'double n = 12 * Y;'调用一个尚未定义的int Y.所以'付款'和'兴趣',这需要额外的未定义变量。您可能想要将这些值作为方法计算,而不是实例化。 – Compass 2014-09-22 20:43:37

+0

请移动声明'int P;'double R;'和'int Y;'up:超出它们的用途,以便它们在使用之前被声明。 – mariusm 2014-09-22 20:46:17

回答

0

我重新检查了这个问题,我注意到你基本上已经写出了所有的代码,它只是不合适的。您希望将您的申报转为r,n,付款和利息,因为它们取决于P,Y和R.您还希望删除+ P+ Y+ R部分,因为这些部分不会打印出任何有意义的内容。

因为您评论说您希望他们是双打,所以我也继续前进,并将所有内容都重新复制一次。如果你愿意,你可以把它们改回int。

import java.util.Scanner; 

public class Carloan { 
    public static void main(String[] args){ 

     double P; 
     double Y; 
     double R; 

     Scanner input = new Scanner (System.in); 

     //double P; 
     System.out.println("Enter loan amount: $"); 

     P = input.nextDouble(); 

     //double Y; 
     System.out.println("Enter number of years: "); 

     Y = input.nextDouble(); 

     //double R; 
     System.out.println("Enter interest rate: %"); 

     R = input.nextDouble(); 

     //calculate all these values after you have P, Y, and R defined, not before 
     double r = R/1200; 
     double n = 12 * Y;   
     double payment = (P * r)/(1 - Math.pow(1+r, -n)); 
     double interest = payment * n - P; 

     System.out.println("Monthly payments = " + payment); 
     System.out.println("Total interest = " + interest); 

    } 
} 
+0

非常感谢!这是我需要的。我试着移动整数并且在没有运气的地方双打。这解决了我的问题。 – 2014-09-22 20:57:01

+0

@MikeMivecNicolosi是的,你必须确保你按你想要的顺序使用它们。通常,人们将所有变量声明保留在顶部,以便他们可以跟踪它们。如果你想给它们赋值,你想在它们需要的所有东西都被定义之后赋值。 – Compass 2014-09-22 20:58:59

2

两个问题:

  1. 您可以使用这些变量声明之前,他们(在其他变量的声明)
  2. 即使你移动这些变量的声明在使用之前,您仍然必须在使用之前对它们进行初始化(与字段不同,如果初始值未在声明中编码,则局部变量不会初始化为默认值)。

看来你认为使用算术表达式声明一个变量会以某种方式保持变量的值不变,因为表达式中使用的变量会改变。不是这种情况;算术表达式仅在编码时执行。

0

您在声明前使用该变量。
尝试

int P; 
int Y; 
double R; 

Scanner input = new Scanner (System.in); 

//double P; 
System.out.println("Enter loan amount: $" + P); 

P = input.nextInt(); 

//double Y; 
System.out.println("Enter number of years: " + Y); 

Y = input.nextInt(); 

//double R; 
System.out.println("Enter interest rate: %" + R); 

R = input.nextDouble(); 

int r = R/1200; 
double n = 12 * Y;   
double payment = (P * r)/(1 - Math.pow(1+r, -n)); 
double interest = payment * n - P; 
System.out.println("Monthly payments = " + payment); 
System.out.println("Total interest = " + interest); 

不要忘了投,如果你希望它是一个int或者只是改变“R”的类型能够翻一番,成为R/1200 INT:双R = R/1200 ;

+0

初始化之前需要在println中使用它:P,Y,R – Krayo 2014-09-22 21:05:23

+0

@Krayo谢谢:) – baki 2014-09-23 12:19:34

0

您需要在使用它们之前定义一些东西。

你要做的第一件事就是int r = R/1200; - 但什么是R?你还没有宣布它[但 - 我知道你稍后宣布double R,但编译器没有]。

我会建议你做所有你的声明没有表达式:int r;,double n,等等在顶部,然后(在你得到用户的输入之后),在底部做数学运算。


它看起来像我以前使用过某种数学语言;重要的是要记住,在程序语言(如java)中,语句是逐行运行的。像x=x+1之类的东西是一个非常有效的陈述,它使得x比它之前的尺寸还大。 x=2; y=x/2; x=4;将以y==1x==4结束,因为x的变化不会带回。

此外,整数算术有点棘手:划分舍入 - 5/2 = 2,而5.0/2.0 = 2.5。这可能是一个问题,当你做r=R/1200,因为R1200都是整数。

1

您想在使用方程式之前将变量和输入值声明到它们中。另外,在给它们一个值之前,你不能使用变量,就像在行中一样:System.out.println(“输入贷款金额:$”+ P);

package com.company; 
import java.util.Scanner; 

public class Main { 
    public static void main(String[] args) { 
     int P, Y; 
     double R; 
     Scanner input = new Scanner (System.in); 

     System.out.println("Enter loan amount: $"); 
     P = input.nextInt(); 

     System.out.println("Enter number of years: "); 
     Y = input.nextInt(); 

     System.out.println("Enter interest rate: %"); 
     R = input.nextDouble(); 

     double r = R/1200; 
     double n = 12 * Y; 
     double payment = (P * r)/(1 - Math.pow(1+r, -n)); 
     double interest = payment * n - P; 

     System.out.println("Monthly payments = " + payment); 
     System.out.println("Total interest = " + interest); 
    } 
}