2014-09-21 242 views
0

所以我是一個(主要)新手到Java,我正在寫一個簡單的程序,打印出每月貸款支付表。我已經格式化了,但嵌套for循環計算已經超過了我的頭。我需要能夠扣除每月50美元的付款,並且按照用戶從1000美元的初始貸款中提示的利率計算。問題嵌套for循環計算

到目前爲止我嘗試過的所有事情都要麼導致無限循環,要麼打印所有12個月的首次餘額計算。

這可能是一個非常明顯的問題,但任何反饋將不勝感激! For循環對我來說不是很直觀,並且盯着這個相同的代碼已經停止了我的進度!

(.....) 


//this method prompts the user to enter the annual interest rate and then prints it 
//along with the initial loan, monthly payment, and a simple loan payment table for 
//one year 

private static void simpleLoanPaymentTable() { 
    Scanner CONSOLE = new Scanner(System.in); 
    double annualInterestRate; 
    double initialLoan = 1000.0; 
    double monthlyPayment = 50.0; 

    System.out.println("Please enter the annual interest rate:"); 
    annualInterestRate = CONSOLE.nextDouble(); 
    double percentAnnualRate = (annualInterestRate/100); 
    double percentMonthlyRate = (percentAnnualRate/12); 
    System.out.println(); 
    System.out.println("The initial loan is $1000.0"); 
    System.out.println("The monthly payment is $50.0"); 
    System.out.println("The annual interest rate is " + annualInterestRate + "%"); 
    System.out.println(); 


    System.out.println("Simple Loan Payment Table For One Year"); 
    System.out.println(); 
    System.out.println(" Month Balance"); 


    //create 12 rows for the months 
    for(int row = 1; row <= 12; row++) { 
    //calculate monthly balance 
    for(double i = 0; i <= initialLoan; i++) { 
     i = (initialLoan-monthlyPayment+(initialLoan*percentMonthlyRate)); 
     System.out.println(" " + row + "  " + i); 
    } 
    } 
    System.out.println(); 
} 

回答

0

覺得這是在幹什麼?

for(double i = 0; i <= initialLoan; i++) { 
    i = (initialLoan-monthlyPayment+(initialLoan*percentMonthlyRate)); 
    System.out.println(" " + row + "  " + i); 
} 

什麼是實際上事情是,你一遍又一遍分配相同的值i

坐下用鉛筆和紙做手工貸款計算。然後將您所經歷的過程轉換爲代碼。

提示:根據我認爲你應該做的事情,內循環不應該是for循環。

+0

很好的意見,我不知道爲什麼我認爲把一個第二個for循環將簡化代碼,當它剛剛結束了它過於複雜。把它放在紙上並作爲計算工作可以消除混淆。謝謝你的幫助。 – immoraliszt 2014-09-21 01:39:10

0

不要在for循環本身中更改循環迭代器。它已經在循環的頂部每次迭代都被更改;你需要在循環中做什麼是使用這些迭代器。

所以你的情況,你說

for(int row = 1; row <= 12; row++) { 

這意味着行= 1開始,由1每次迭代增加它,去,直到你不再是小於或等於12那你說

for(double i = 0; i <= initialLoan; i++) { 

這意味着以i = 0開始,每次迭代增加1,直到您小於或等於您的初始貸款。請注意,有些東西並沒有加起來:你的迭代器我不應該增加1,直到你獲得最初的貸款,(我相信)它應該迭代1,直到你的計算貸款達到最初的貸款。

然後在nexted循環中,使用這兩個迭代器(但不要更改它們)來計算當前在您的行/列中的貸款。

這將解決您的無限循環問題(除非數學仍然不正確),但仍然可能不是您正在尋找的答案。問問自己,這張表中應該代表什麼是你的「行」?這個表中的列應該表示什麼?然後找出如何在任何給定的迭代中使用(但不改變)行值(月)和列值(i)來計算表中的數字。

編輯:再次,我可能會錯誤地處理數學,但我自己搞砸了,並意識到你實際上沒有任何列在你的表中:它只是行(==月)。所以你只需要一個循環來重複幾個月,剩下的只是一個計算。檢查了這一點,看看這是你在找什麼:

double currentLoan = initialLoan; 
for(int row = 1; row <= 12; row++) { 
    //calculate monthly balance 
    currentLoan = (currentLoan-monthlyPayment)*(1+percentMonthlyRate); 
    System.out.println(" " + row + "\t" + currentLoan); 
} 
+0

啊是的!該編輯幫助。我已經嘗試過你的初始解決方案,並且經過修改後再次陷入了無限循環。我認爲我輸入的第二個循環只是多餘的。我必須回去並確保數學是正確的,但我絕對同意你的邏輯。謝謝你的幫助! – immoraliszt 2014-09-21 01:36:42

+0

很高興聽到。請務必將主題標記爲已關閉/接受答案,以便任何稍後訪問此主題的人都不會嘗試回答。此外,一定要避免程序中的整數除法(annualInterestRate/100,percentAnnualRate/12) - >(annualInterestRate/100.0,percentAnnualRate/12.0),因爲這些在使用整數時不等同。 – NoseKnowsAll 2014-09-21 02:01:23