2014-09-22 97 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); 
    } 
}