2014-09-21 2 views
0

저는 Java에 대한 (초보) 초보자이며 월별 대금 지불 테이블을 인쇄하는 간단한 프로그램을 작성하고 있습니다. 나는 아래로 형식을 가지고 있지만 중첩 된 루프 계산은 내 머리 위로 가고있다. 나는 $ 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

좋은 조언 나는 그것이 그냥과 복잡함을 결국 때 코드를 단순화 할 루프에 대한 두 번째 퍼팅 생각하는 이유, 나도 몰라. 그것을 종이에 집어 넣고 계산으로 작업하면 혼란이 해결됩니다. 당신의 도움을 주셔서 감사합니다. – immoraliszt

0

for 루프 내부에서 루프 반복기를 변경하지 마십시오. 루프의 맨 위에있는 모든 반복이 이미 변경되고 있습니다. 루프 내부에서해야 할 일은이 반복자를 사용하는 것입니다.

그래서 귀하의 경우, 당신은 말한다, 행 = 1로 시작하는 1마다 반복을 증가, 당신은 당신이 말하는 그런 다음 12 더 이상 이하가 될 때까지 이동을 의미

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

I = 0, 1로 모든 반복을 높이고, 당신은 당신의 초기 대출보다 작거나 같은 때까지 이동 시작을 의미

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

. 이미 무언가가 추가되지 않고 있음을 주목하십시오. 이터레이터는 초기 대출에 도달 할 때까지 1 씩 증가하지 않아야합니다. (나는 믿습니다) 계산 된 대출이 초기 대출에 도달 할 때까지 1 씩 반복해야합니다.

다음 루프 내에서 현재 행/열에있는 대출을 계산하려면이 두 반복기를 사용하십시오 (그러나 변경하지 마십시오).

이것은 수학 문제가 아니라면 무한 루프 문제를 해결하지만 여전히 원하는 답변이 아닐 수 있습니다. 이 테이블에서 당신의 "행"은 무엇을 나타낼 것인가? 이 표의 표제 란 무엇입니까? 그런 다음 주어진 반복에서 행 값 (월)과 열 값 (i)을 USING (변경하지 않음) 테이블에서 계산하는 방법을 파악하십시오.

편집 : 다시 말하지만, 수학을 잘못 처리하고있을 수도 있지만 혼자서 혼란스러워하고 테이블에 실제로 열이 없다는 것을 깨달았습니다. 행 (== 개월)입니다. 따라서 달을 반복하는 데 하나의 루프 만 있으면되고 나머지는 계산할 수있는 것입니다.이 체크 아웃이 당신을 위해 무엇을 찾고 있는지 :

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

+0

다행입니다. 주제를 닫은 것으로 표시했거나 대답을 수락하여 나중에이 스레드에있는 모든 사람이 시도하지 않고 응답하도록하십시오. 또한 정수 (integerInterestRate/100, percentAnnualRate/12) -> (annualInterestRate/100.0, percentAnnualRate/12.0)는 정수를 사용할 때 같지 않으므로 정수 나누기를 피하십시오. – NoseKnowsAll