关于在这段代码上放置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.");
}
}
}
答案 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}