有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

输入/输出Java示例

我正在尝试创建一个程序,该程序反复要求水位不断上升,并且我的程序应该检测到连续三次下降的读数。以下是控制台上打印的内容:

现在的水位是多少(单位:mm):20
现在的水位是多少(单位:mm):21
现在的水位是多少(单位:mm):23
现在的水位是多少(单位:mm):25
现在的水位是多少(单位:mm):27
现在的水位是多少(单位:mm):27
现在的水位是多少(单位:mm):34
现在的水位是多少(单位:mm):22
现在的水位是多少(单位:mm):25
现在的水位是多少(单位:mm):26
现在的水位是多少(单位:mm):28
现在的水位是多少(单位:mm):27
现在的水位是多少(单位:mm):26
现在的水位是多少(单位:mm):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){
            }
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    有关如何使用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所说,如果你只需要在水位连续三次下降时处理一个警报,你就不需要存储。 如果您需要更复杂的操作(例如统计报告),这可能是关于如何使用ArrayList的提示

  2. # 2 楼答案

    这里的问题是,您每次都将当前waaterLevel与第一个水位(即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变量轻松完成。(记住这些把戏)