簡體   English   中英

關於while循環的困惑

[英]confusion about while loop

從昨天開始,我才剛剛開始學習我的第一門編程語言,因此我正在從Java書籍中編寫簡單的測試程序。

我想要做的是讓用戶輸入一個靜態的每月投資以及他們將節省多少個月,然后在這段時間后顯示其總節省額。

當我編譯程序時,在程序末尾的system.out.println中說總計尚未初始化。 我曾嘗試僅在循環中初始化total,但我認為這會將其范圍放入循環中,因此我嘗試將其初始化在頂部,並發現它貫穿循環直到滿足條件但不返回到程序的頂部將值放回去,所以我在循環結束時制作了另一個變量以將總數保存在循環結束時。 我的邏輯有什么問題

感謝您的幫助!

import java.util.Scanner;

public class CompoundInterestSteadyRate {

public static void main(String[] args){ 
Scanner input = new Scanner(System.in);


double monthlyInterestRate = (1 + 0.00417);

System.out.println("please enter amount saved each mounth");

double amountSavedMonthly = input.nextDouble();

System.out.println("please enter amount of months you will be saving for");
int amountOfMonthsSaved = input.nextInt();

int monthCountDown = amountOfMonthsSaved;

double totalAmount;
double addMonths;
double intitalAmount = 0;
while (monthCountDown > 0){

    addMonths = amountSavedMonthly * monthlyInterestRate + intitalAmount;

    intitalAmount = addMonths;

      totalAmount = intitalAmount;

}
double total = totalAmount;
System.out.println("your total after " + " " + amountOfMonthsSaved + " " + "months is:" + " " + "$" + total);
}

}

謝謝大家現在提供的幫助,但是似乎在進行數學計算時沒有考慮到儲蓄的第一個月,例如,如果我每月進行$ 100的儲蓄,則其最終總金額為%502.08,我不相信是對的

import java.util.Scanner;

public class CompoundInterestSteadyRate {

public static void main(String[] args){ 
Scanner input = new Scanner(System.in);


double monthlyInterestRate = (1 + 0.00417);

System.out.println("please enter amount saved each mounth");

double amountSavedMonthly = input.nextDouble();

System.out.println("please enter amount of months you will be saving for");
int amountOfMonthsSaved = input.nextInt();

int monthCountDown = amountOfMonthsSaved;

double totalAmount = 0;
double addMonths;
double intitalAmount = 0;
while (monthCountDown > 1){

    addMonths = amountSavedMonthly * monthlyInterestRate + intitalAmount;

    intitalAmount = addMonths;

      totalAmount = intitalAmount;

    monthCountDown = monthCountDown - 1;
}
double total = totalAmount;
System.out.println("your total after " + " " + amountOfMonthsSaved + " " + "months is:" + " " + "$" + total);

設置totalAmount = 0,將會初始化它,讓我知道這是否解決了問題

當您聲明它時,就這樣聲明它: double totalAmount = 0;

盡管編譯器( javac程序)提供了以下有用的消息,但這個問題有些復雜:

Compound.java:33:錯誤:變量totalAmount可能尚未初始化double total = totalAmount;

您可能想知道會發生什么。 簡單的答案是轉到程序的第20行,並將totalAmount的值初始化為0 然后您的程序將編譯。

編譯器這樣做的原因相當復雜,但是您可以通過以下方式對此進行推理:

如果,如果while循環甚至一次都沒有運行怎么辦(正如在程序中所寫的那樣,相反的情況正在發生,因為您很快就會發現自己忘記了關於loop變量的東西)? 然后Java將執行(next)語句double total = totalAmount; 賦值語句的執行方式大致如下:

  • 讀取=右側的變量,即臨時位置中的totalAmount
  • 將該位置的內容傳送到=左側的變量的內存中,即total

現在, Java不喜歡讀取從未寫入的局部變量(例如totalAmount )值,因為它可能包含一些垃圾值。 當您使用類似0的值對其進行初始化時,此問題就消失了。

嘗試2個步驟:

  1. double totalAmount; ==> double totalAmount = 0;
  2. while (monthCountDown > 0); ==> while (monthCountDown-- > 0);

哈瓦,天氣很好,我的朋友。

首先,不需要使用intitalAmount和totalAmount。 因為每次您都向它們插入相同的值。 其次,如果你做

monthCountdown > 1

那么它將少計算一個月。 因為假設您要數6個月。 現在,對於monthCountdown> 1,循環將迭代5次並計算5次利息。 我認為這不是您要實現的邏輯。 應該是這樣

monthCountdown > 0

最后,您的數學邏輯是不正確的,因為每次您都要計算月度值的利息並將其與以前的余額相加。 但這就像每次應根據當前總余額計算利息一樣。

while (monthCountDown > 0){    
        totalAmount = ( amountSavedMonthly + totalAmount ) * monthlyInterestRate;
}

如果有任何疑問,請告訴我。

首先,不一定要初始化totalAmount 但是,根據用戶的輸入,可能未初始化totalAmount ,這在程序嘗試將totalAmount的值分配給total時會引發異常。 為避免這種情況,您需要確保對totalAmount進行了初始化,這很容易做到。 聲明totalAmount ,只需將0分配為其值。

您的while循環也有問題。 因為monthCountDown的值在循環內永不更改,所以條件monthCountDown > 0變為false是不可能的。 我假設您打算每次運行循環時將monthCountDown減少1,所以您應該包括monthCountDown--; 在循環中以防止其成為無限循環。

cricket-007關於初始化totalamount = 0是正確的; 但是看起來您的while循環一直在繼續。 嘗試這個!

在while循環上將箭頭鍵從>更改為<

import java.util.Scanner;

public class CompoundInterestSteadyRate {

    public static void main(String[] args) { 
        Scanner input = new Scanner(System.in);

        double monthlyInterestRate = (1 + 0.00417);

        System.out.println("please enter amount saved each mounth");

        double amountSavedMonthly = input.nextDouble();

        System.out.println("please enter amount of months you will be saving for");
        int amountOfMonthsSaved = input.nextInt();

        int monthCountDown = amountOfMonthsSaved;

        double totalAmount =0;
        double addMonths;
        double intitalAmount = 0;
        while (monthCountDown < 0) {
            addMonths = amountSavedMonthly * monthlyInterestRate + intitalAmount;

            intitalAmount = addMonths;

            totalAmount = intitalAmount;
        }
        double total = totalAmount;
        System.out.println("your total after " + " " + amountOfMonthsSaved + " " + "months is:" + " " + "$" + total);
    }
}

將totalAmount初始化為0 ...

條件大於1時進入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM