繁体   English   中英

输入/输出Java示例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM