如何使用带有警句的while循环重复输入

时间:2018-07-02 06:29:02

标签: java loops while-loop java.util.scanner

关于在这段代码上放置while循环的位置,我需要帮助。我几周前才开始学习Java。我想写一个sentinel值-1,如果输入,程序将退出。只要用户输入不是-1,就不断要求重复执行该程序。

当我将while循环“ while(currentPop!= -1)” 放入第一个问题“输入当前人口”的下方时,程序将成功运行其第一门课程。但是,它不会循环回到第一个问题。而是直接转到第二个问题“输入出生率:”。

我应该如何进行操作,并确保在遍历循环后不断问到第一个问题?

谢谢大家!

import java.util.Scanner;

public class Population
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        double birthRate, deathRate;
        double currentPop = 0; 
        double newPop;
        long years;

        System.out.print("Enter current population or -1 to exit: ");
        currentPop = scan.nextDouble();

        System.out.print("Enter birth rate: ");
        birthRate = scan.nextDouble();

        System.out.print("Enter death rate: ");
        deathRate = scan.nextDouble();
        newPop = 0;
        years = 0;          

        System.out.println("===================");
        System.out.println("YEAR     POPULATION");
        System.out.println("===================");

        if (birthRate > deathRate) {
            System.out.printf("0   %,15d\n", (int)currentPop);
            double growthRate = (birthRate - deathRate);
            double doublingTime = Math.log(2) / 
                                Math.log(1 +(growthRate/100)); 
            for (years = 1; years <= (doublingTime+1); years++) {
                newPop = ((growthRate/100) * currentPop) + currentPop;
                currentPop = newPop;
                System.out.printf("%,d   %,15d\n",years,(int)currentPop);
            }
            System.out.printf("\nIt will take %,d years to reach double " 
                            + "the population of %,d\n\n",
                              (int)(doublingTime + 1),(int)currentPop);   
        } else if (birthRate < deathRate) {
            System.out.printf("0   %,15d\n", (int)currentPop);
            double growthRate = (birthRate - deathRate);
            double decreaseTime = Math.log(1/currentPop) 
                                  / Math.log(1 + (growthRate/100));
            for (years = 1; years < (1 + decreaseTime) ; years++) {
                newPop = ((growthRate/100) * currentPop) + currentPop;
                currentPop = newPop;
                System.out.printf("%,d   %,15d\n",years,(int)currentPop);
            }
            System.out.printf("\nPopulation will be zero in %,d years.\n",
                             (int)decreaseTime + 1);
        } else if(birthRate == deathRate) {
        System.out.printf("0   %,15d\n", (int)currentPop);
        double growthRate = (birthRate - deathRate);
        double decreaseTime = Math.log(1/currentPop) 
                              / Math.log(1 + (growthRate/100));
        for (years = 1; years < (1 + decreaseTime) ; years++) {
            newPop = ((growthRate/100) * currentPop) + currentPop;
            currentPop = newPop;
            System.out.printf("%,d   %,15d\n",years,(int)currentPop);
        }
        System.out.printf("\nPopulation is stable.");
    }
}

}

5 个答案:

答案 0 :(得分:2)

退出程序

仅从主方法返回

fcopy $fin $fout

退出或重新启动程序

在循环结构体中使用System.out.print("Enter current population or -1 to exit: "); currentPop = scan.nextDouble(); if (currentPop == -1.0) { return; } System.out.print("Enter birth rate: "); break

continue

一个不接受while (true) { System.out.print("Enter current population or -1 to exit: "); currentPop = scan.nextDouble(); if (currentPop == -1) { break; } else if (currentPop <= 0) { System.out.println("Population must be positive"); continue; // restart the loop } System.out.print("Enter birth rate: "); ... } System.out.println("Done!"); 的函数

您可以使用一种方法来提取重复的任务(多个输入)

-1

在主要方法中

public static double getValue(Scanner s, String msg) {
  double value = -1;
  while (value == -1) {
    System.out.print(msg);
    value = s.nextDouble();
  }
  return value;
}

答案 1 :(得分:0)

我认为您应该在第一个问题和其余代码之前添加while(currentPop != -1) {。在该行之后,请记住设置currentPop = 0并在代码}的末尾。 编辑: 而且当然 在第一个问题之后 if (currentPop == -1) break;

答案 2 :(得分:0)

虽然循环将仅重复其中包含的代码。所以这段代码:

System.out.print("Enter current population or -1 to exit: ");
currentPop = scan.nextDouble();

while (currentPop != -1) {
    System.out.print("Enter birth rate: ");
    birthRate = scan.nextDouble();

    // the rest of your code
}

将仅重复while循环中的内容。在这种情况下,它只会询问出生率。

您想要的实际代码是:

while (true) {
    System.out.print("Enter current population or -1 to exit: ");
    currentPop = scan.nextDouble();

    if (currentPop == -1) {
        break;
    }

    System.out.print("Enter birth rate: ");
    birthRate = scan.nextDouble();

    // the rest of your code
}

让我们分解一下。

如果要再次请求当前填充,则需要将该行放入while循环中。

我不知道您是否熟悉break,但是您说您是新手。 break的作用是退出其中的任何循环。这与while (true)一起意味着while循环将永远运行,除非调用if语句。希望有帮助!

答案 3 :(得分:0)

这是您想要的代码-

import java.util.Scanner;

public class Population
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        double birthRate, deathRate;
        double currentPop = 0; 
        double newPop;
        long years;

        while(true) {
            System.out.print("Enter current population or -1 to exit: ");
            currentPop = scan.nextDouble();
            if(currentPop == -1)
                break;

            System.out.print("Enter birth rate: ");
            birthRate = scan.nextDouble();

            System.out.print("Enter death rate: ");
            deathRate = scan.nextDouble();
            newPop = 0;
            years = 0;          

            System.out.println("===================");
            System.out.println("YEAR     POPULATION");
            System.out.println("===================");

            if (birthRate > deathRate) {
                System.out.printf("0   %,15d\n", (int)currentPop);
                double growthRate = (birthRate - deathRate);
                double doublingTime = Math.log(2) / 
                                    Math.log(1 +(growthRate/100)); 
                for (years = 1; years <= (doublingTime+1); years++) {
                    newPop = ((growthRate/100) * currentPop) + currentPop;
                    currentPop = newPop;
                    System.out.printf("%,d   %,15d\n",years,(int)currentPop);
                }
                System.out.printf("\nIt will take %,d years to reach double " 
                                + "the population of %,d\n\n",
                                  (int)(doublingTime + 1),(int)currentPop);   
            } else if (birthRate < deathRate) {
                System.out.printf("0   %,15d\n", (int)currentPop);
                double growthRate = (birthRate - deathRate);
                double decreaseTime = Math.log(1/currentPop) 
                                      / Math.log(1 + (growthRate/100));
                for (years = 1; years < (1 + decreaseTime) ; years++) {
                    newPop = ((growthRate/100) * currentPop) + currentPop;
                    currentPop = newPop;
                    System.out.printf("%,d   %,15d\n",years,(int)currentPop);
                }
                System.out.printf("\nPopulation will be zero in %,d years.\n",
                                 (int)decreaseTime + 1);
            } else if(birthRate == deathRate) {
                System.out.printf("0   %,15d\n", (int)currentPop);
                double growthRate = (birthRate - deathRate);
                double decreaseTime = Math.log(1/currentPop) 
                                      / Math.log(1 + (growthRate/100));
                for (years = 1; years < (1 + decreaseTime) ; years++) {
                    newPop = ((growthRate/100) * currentPop) + currentPop;
                    currentPop = newPop;
                    System.out.printf("%,d   %,15d\n",years,(int)currentPop);
                }
                System.out.printf("\nPopulation is stable.");
            }
        }
        scan.close();
    }
}

答案 4 :(得分:-1)

要实现一会儿,首先循环确定终止条件,直到终止条件(即false)生效,其语法可能如下所示:

while(true) { //your code}