[英]Input/output Java example
我正在尝试创建一个程序,该程序反复询问应连续上升的水位,并且我的程序应该检测何时连续出现三个下降的读数 。 这是控制台上打印的内容:
现在的水位是多少(毫米):20
现在的水位是多少(毫米):21
现在的水位是多少(毫米):23
现在的水位是多少(毫米):25
现在的水位是多少(毫米):27
现在的水位是多少(毫米):27
现在的水位是多少(毫米):34
现在的水位是多少(毫米):22
现在的水位是多少(毫米):25
现在的水位是多少(毫米):26
现在的水位是多少(毫米):28
现在的水位是多少(毫米):27
现在的水位是多少(毫米):26
现在的水位是多少(毫米):25
看来洪水正在消退。
目前,我知道我应该循环它,但是我一直在使用python,所以我不确定如何继续使用java。 如何存储问题的输入以便与之前的答案进行比较? 任何帮助将不胜感激。
import java.util.Scanner;
public class waterLevelProgram {
public static void main(String[] args) {
double waterLevel, initialWaterLevel;
waterLevel = 0;
System.out.print("What is the water level at now (in mm): ");
initialWaterLevel = new Scanner(System.in).nextDouble();
while (waterLevel > 0){
System.out.println("What is the water level at now (in mm): ");
waterLevel = new Scanner(System.in).nextDouble();
if (waterLevel > initialWaterLevel){
}
}
}
}
这里的问题是您waaterLevel
都将当前的waaterLevel
与第一个waterLevel(即initialWaterLevel
进行比较,因此您得到了意外的输出。 您应该在循环结束时将initialWaterLevel
更新为当前水平,以便可以在下一个循环中与它进行比较。
public static void main(String[] args) {
double waterLevel, initialWaterLeve;
waterLevel = 0;
initialWaterLeve = 0;
int count=0;
Scanner sc = new Scanner(System.in);
while (waterLevel > 0){
System.out.println("What is the water level at now (in mm): ");
waterLevel = sc.nextDouble();
if (waterLevel < initialWaterLevel){
count++;
}
else{
count=0;
}
if(count>=3){
System.out.println("It appears that the flood is subsiding.");
break; // if you want to come out of loop.
}
initialWaterLevel = waterLevel;
}
}
不需要ArrayList或Queue,因为您的目标是检查是否连续发生了三个减少,这可以通过int
变量轻松完成。 (记住这些技巧)
一个有关如何使用ArrayList在程序中存储值的简单示例:
import java.util.Scanner;
public class waterLevelProgram {
ArrayList<double> waterLevels = new ArrayList<double>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("What is the water level at now (in mm): ");
currentWaterLevel = scanner.nextDouble();
waterLevels.add(currentWaterLevel);
if (isFloodSubsiding())
System.out.println("Flood is subsiding");
}
}
public static boolean isFloodSubsiding(){
if (waterLevels.size() >= 3)
{
return
(
waterLevels.get(waterLevels.size()-1) < waterLevels.get(waterLevels.size()-2)
&& waterLevels.get(waterLevels.size()-2) < waterLevels.get(waterLevels.size()-3)
);
}
else
return false;
}
}
但是,正如@jack所说,如果waterLevel连续下降3次时只需要处理警报,则实际上并不需要存储。 如果您需要更复杂的操作(例如统计报告),这可能是有关如何使用ArrayList的提示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.