关于while循环的混淆

时间:2016-05-06 03:16:45

标签: java while-loop

我刚刚开始学习我的第一个编程语言,所以我正在从我的java书中编写简单的测试程序。

我尝试做的是让用户输入每月静态投资以及他们将保存多少个月,然后在该段时间后显示他们的总节省。

当我编译程序时,它表示在程序结尾的system.out.println中,total尚未初始化。我已经尝试在循环中初始化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);

7 个答案:

答案 0 :(得分:2)

设置totalAmount = 0,会对其进行初始化,请告诉我这是否可以解决问题

当你声明它声明它像double totalAmount = 0;

答案 1 :(得分:1)

虽然编译器(javac程序)提供了以下有用信息,但这个问题有点复杂:

  

Compound.java:33:错误:变量totalAmount可能不存在   initialized double total = totalAmount;

你可能想知道会发生什么。简单的答案是转到您的计划中的第20行,并将totalAmount的值初始化为0。然后你的程序就会编译。

编译器执行此操作的原因相当复杂,但您可以这样理由:

如果,while循环甚至没有运行一次(如你所写,在你的程序中,相反的情况发生了,因为你很快就会发现你忘记了一些关于循环的内容,该怎么办?变量)?然后Java将执行(下一个)语句double total = totalAmount;,并且执行此赋值语句的方式大致如下:

  • 读取=右侧的变量,即临时位置totalAmount
  • 将该位置的内容传输到=左侧变量的内存中,即total

现在,Java does not like to read 本地变量(例如totalAmount)值从未写入,因为它可能包含一些垃圾价值。当您使用0之类的值对其进行初始化时,此问题就会消失。

答案 2 :(得分:1)

尝试两个步骤:

  1. double totalAmount; ==> double totalAmount = 0;
  2. while (monthCountDown > 0); ==> while (monthCountDown-- > 0);
  3. Hava美好的一天,我的朋友。

答案 3 :(得分:1)

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

monthCountdown > 1
然后它将减少一个月。因为假设你数了6个月。现在为monthCountdown> 1循环将迭代5次并计算5次兴趣。我认为这不是你想要实现的逻辑。 所以它应该是,

monthCountdown > 0

最后,您的数学逻辑不正确,因为每次计算每月价值的利息并将其与之前的余额相加。但它应该像每次利息应该计算总的当前余额。

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

如果有任何疑虑,请告诉我。

答案 4 :(得分:0)

首先,totalAmount不会被初始化的情况不一定如此。但是,根据用户输入,可能会totalAmount初始化totalAmount,这会在程序尝试将total的值分配给totalAmount时抛出异常。为避免这种情况,您需要确保totalAmount被初始化,这很容易做到。当您声明0时,只需指定while作为其值。

您的monthCountDown循环也存在问题。由于monthCountDown > 0的值永远不会在循环中更改,因此条件false无法变为monthCountDown。我假设您每次运行循环时都希望monthCountDown--;减少1,因此您应该在循环中包含models以防止它成为无限循环。

答案 5 :(得分:0)

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);
    }
}

答案 6 :(得分:0)

将totalAmount初始化为0 ...

在条件大于1的情况下进入..