1

人口の出生率と死亡率を取得し、年間人口が 0 または 2 倍になるまでループするプログラムを作成しようとしています。

私の問題は、判読できない数字を無限にループし続け、修正できないことです。

import java.util.Scanner;
public class Hwk6 {
    public static void main (String[] args) {
        int currentYear, currentPopulation;
        double birthRate, deathRate;
        Scanner stdin = new Scanner(System.in);

        System.out.println("\nPopulation Estimator\n");
        System.out.println("Enter Year");
        currentYear = stdin.nextInt();
        System.out.println("Enter Current Population");
        currentPopulation = stdin.nextInt();
        System.out.println("Enter Birthrate of Population");
        birthRate = stdin.nextDouble();
        System.out.println("Enter Deathrate of Population");
        deathRate = stdin.nextDouble();

        int counter = currentPopulation;
        System.out.println("Population: ");
        while (currentPopulation != -1)
            while (counter < currentPopulation * 2) {
                System.out.print(counter + " ");
                counter = counter + (int)(counter * birthRate - counter * deathRate);
            }
        System.exit(0);
    }
}
4

2 に答える 2

4

ループ内のcurrentPopulationどこかの値を更新します。そうしないと、(元の値でない限り)常にtrue と評価され、無限ループに陥ります。whilewhile (currentPopulation != -1)-1

または多分あなたは意味した

if (currentPopulation != -1)

それ以外の

while (currentPopulation != -1)
于 2012-10-26T22:53:36.273 に答える
2
while (currentPopulation != -1)

while 条件は常に true になるため、無限に繰り返されます。currentPopulationwhile ループ内の値をどこでも変更していないためです。

currentPopulation内側の while ループが終了した後、外側の while ループのどこかの値を変更する必要があります。

while (currentPopulation != -1) {
     while (counter < currentPopulation * 2) {
           System.out.print(counter + " ");
           counter = counter + (int)(counter * birthRate - counter * deathRate);
     }

    // Change your `currentPopulation` here
}
于 2012-10-26T22:56:11.310 に答える