Java-(While 循环)如何将最后一个输入循环排除在打印变量之外?
Java- (While loop) how to keep last input loop out of printed variables?
我正在编写一个睡眠跟踪器,当我的 while 循环中断时,它将“中断”输入作为我数组的有效输入,我将分享下面的代码以获取更多上下文:
double optHours;
int nightCount = 0;
double sleepHistory;
double historySum = 0;
int belowAVG = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Please enter your optimal sleep time (in hours):");
optHours = sc.nextDouble();
System.out.println("Next, enter your recorded sleep history values (in hours) \n" +
"Enter a negative value when done:");
sleepHistory = sc.nextDouble();
double minSleep = Double.MIN_VALUE;
while (sleepHistory != -1) {
sleepHistory = sc.nextDouble();
historySum += sleepHistory;
nightCount++;
if (sleepHistory < optHours) {
belowAVG++;
}
if (sleepHistory < minSleep) {
minSleep = sleepHistory;
}
}
double avgSleepTime = historySum / nightCount;
System.out.println("Your sleep report: \n" +
nightCount + " nights total. \n" +
belowAVG + " nights below your optimal sleep time \n" +
"Lowest sleep time: " + minSleep + "\n" +
"Average sleep time: " + avgSleepTime);
}
}
现在,当我 运行 我的代码时,它采用用于中断循环的最后一个输入 (-1) 并将其放入最低睡眠时间变量 (minSleep),它也会输入相同的输入在我的平均计算中使它不可靠。我将为更多上下文添加输出示例:
Please enter your optimal sleep time (in hours):
5
Next, enter your recorded sleep history values (in hours)
Enter a negative value when done:
6
6
6
6
7
8
8.5
-1
Your sleep report:
7 nights total.
1 nights below your optimal sleep time
Lowest sleep time: -1.0
Average sleep time: 5.785714285714286
现在,我的目标是在我的计算中以及在为 minSleep 变量赋值时避免负数(中断输入)
问题是您检查 sleephistory 是否为负数,但立即将其设置为下一个 double 而没有检查下一个 double 是否为负数。我修改了 while 循环,试试看它是否更好。
while (sleepHistory < 0) {
if(sc.nextDouble() > 0){
sleepHistory = sc.nextDouble();
}
historySum += sleepHistory;
nightCount++;
if (sleepHistory < optHours) {
belowAVG++;
}
if (sleepHistory < minSleep) {
minSleep = sleepHistory;
}
}
您可以修改代码以接收用户的输入并在 while 循环中根据您的条件检查它。通过检查输入的值是否大于或等于 0,代码将继续执行,直到输入任何负值。这将使您的代码更清晰,更易于遵循。您还想将最小睡眠值设置为最大的两倍,因为当您将其设置为可能的最小数字时,它就无法被击败。这导致每次执行程序时都相同 Double.MIN_VALUE。
double optHours;
int nightCount = 0;
double sleepHistory;
double historySum = 0;
int belowAVG = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Please enter your optimal sleep time (in hours):");
optHours = sc.nextDouble();
System.out.println("Next, enter your recorded sleep history values (in hours) \n" +
"Enter a negative value when done:");
double minSleep = Double.MAX_VALUE; //set to the biggest value
while ((sleepHistory = sc.nextDouble()) >= 0) //grab data and check it every iteration
{
historySum += sleepHistory;
nightCount++;
if (sleepHistory < optHours) {
belowAVG++;
}
if (sleepHistory < minSleep) {
minSleep = sleepHistory;
}
}
double avgSleepTime = historySum / nightCount;
System.out.println("Your sleep report: \n" +
nightCount + " nights total. \n" +
belowAVG + " nights below your optimal sleep time \n" +
"Lowest sleep time: " + minSleep + "\n" +
"Average sleep time: " + avgSleepTime);
输出
Please enter your optimal sleep time (in hours):
8
Next, enter your recorded sleep history values (in hours)
Enter a negative value when done:
8
7
8
3
0
5
8
-5
Your sleep report:
7 nights total.
4 nights below your optimal sleep time
Lowest sleep time: 0.0
Average sleep time: 5.571428571428571
我正在编写一个睡眠跟踪器,当我的 while 循环中断时,它将“中断”输入作为我数组的有效输入,我将分享下面的代码以获取更多上下文:
double optHours;
int nightCount = 0;
double sleepHistory;
double historySum = 0;
int belowAVG = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Please enter your optimal sleep time (in hours):");
optHours = sc.nextDouble();
System.out.println("Next, enter your recorded sleep history values (in hours) \n" +
"Enter a negative value when done:");
sleepHistory = sc.nextDouble();
double minSleep = Double.MIN_VALUE;
while (sleepHistory != -1) {
sleepHistory = sc.nextDouble();
historySum += sleepHistory;
nightCount++;
if (sleepHistory < optHours) {
belowAVG++;
}
if (sleepHistory < minSleep) {
minSleep = sleepHistory;
}
}
double avgSleepTime = historySum / nightCount;
System.out.println("Your sleep report: \n" +
nightCount + " nights total. \n" +
belowAVG + " nights below your optimal sleep time \n" +
"Lowest sleep time: " + minSleep + "\n" +
"Average sleep time: " + avgSleepTime);
}
}
现在,当我 运行 我的代码时,它采用用于中断循环的最后一个输入 (-1) 并将其放入最低睡眠时间变量 (minSleep),它也会输入相同的输入在我的平均计算中使它不可靠。我将为更多上下文添加输出示例:
Please enter your optimal sleep time (in hours):
5
Next, enter your recorded sleep history values (in hours)
Enter a negative value when done:
6
6
6
6
7
8
8.5
-1
Your sleep report:
7 nights total.
1 nights below your optimal sleep time
Lowest sleep time: -1.0
Average sleep time: 5.785714285714286
现在,我的目标是在我的计算中以及在为 minSleep 变量赋值时避免负数(中断输入)
问题是您检查 sleephistory 是否为负数,但立即将其设置为下一个 double 而没有检查下一个 double 是否为负数。我修改了 while 循环,试试看它是否更好。
while (sleepHistory < 0) {
if(sc.nextDouble() > 0){
sleepHistory = sc.nextDouble();
}
historySum += sleepHistory;
nightCount++;
if (sleepHistory < optHours) {
belowAVG++;
}
if (sleepHistory < minSleep) {
minSleep = sleepHistory;
}
}
您可以修改代码以接收用户的输入并在 while 循环中根据您的条件检查它。通过检查输入的值是否大于或等于 0,代码将继续执行,直到输入任何负值。这将使您的代码更清晰,更易于遵循。您还想将最小睡眠值设置为最大的两倍,因为当您将其设置为可能的最小数字时,它就无法被击败。这导致每次执行程序时都相同 Double.MIN_VALUE。
double optHours;
int nightCount = 0;
double sleepHistory;
double historySum = 0;
int belowAVG = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Please enter your optimal sleep time (in hours):");
optHours = sc.nextDouble();
System.out.println("Next, enter your recorded sleep history values (in hours) \n" +
"Enter a negative value when done:");
double minSleep = Double.MAX_VALUE; //set to the biggest value
while ((sleepHistory = sc.nextDouble()) >= 0) //grab data and check it every iteration
{
historySum += sleepHistory;
nightCount++;
if (sleepHistory < optHours) {
belowAVG++;
}
if (sleepHistory < minSleep) {
minSleep = sleepHistory;
}
}
double avgSleepTime = historySum / nightCount;
System.out.println("Your sleep report: \n" +
nightCount + " nights total. \n" +
belowAVG + " nights below your optimal sleep time \n" +
"Lowest sleep time: " + minSleep + "\n" +
"Average sleep time: " + avgSleepTime);
输出
Please enter your optimal sleep time (in hours):
8
Next, enter your recorded sleep history values (in hours)
Enter a negative value when done:
8
7
8
3
0
5
8
-5
Your sleep report:
7 nights total.
4 nights below your optimal sleep time
Lowest sleep time: 0.0
Average sleep time: 5.571428571428571