gpt4 book ai didi

java - 使用哨兵控制循环不断请求 double 值的程序

转载 作者:行者123 更新时间:2023-12-01 18:09:05 25 4
gpt4 key购买 nike

所以我正在开发一个 Java 程序,它不断地要求用户提供 double 值。我应该使用哨兵值为-999 的哨兵控制循环。我需要在使用 try/catch block 处理 inputMismatchExceptions、ArrayStoreExeptions 和一般异常时使用 ArrayList。

我目前在输入 -999 后尝试完成程序、应用来自 ArrayStoreExceptions 的重复消息的消息以及在 inputMismatchExceptions 之后继续输入时遇到问题。

public static void main(String[] args) {
double d;
double average;
double max;
double min;

ArrayList<Double> value = new ArrayList<Double>();
Scanner input = new Scanner(System.in);
System.out.println("Enter a double value (-999 to exit):");
d = input.nextDouble();

while (!value.equals(-999)) {

try {
System.out.println("Enter a double value (-999 to exit):");
value.add(input.nextDouble());


} catch (InputMismatchException e) {
System.out.println("That is not a valid double value.");

} catch (ArrayStoreException e) {
System.out.println("Duplicate value");
} catch (Exception e) {
System.out.println("Error");
}

}

}

最佳答案

  1. 您正在使用
value.equals(-999)

但值是 ArrayList<Double>而-999只是一个double (实际上是一个整数)。您不想检查整个列表是否等于 -999,您只想检查最后输入的值是否为 -999。

  • 如果您不想允许重复,则应该使用 Set ,不是 ArrayList .

  • 当您收到 InputMismatchException 时,您需要先调用 in.nextLine(),然后再向用户询问另一个 double 值。这是因为,如果您不调用 in.nextLine(),您的扫描仪仍将尝试读取上次导致异常的相同文本。

  • 这是对代码的(经过大量修改)更改,它应该按您的预期工作:(您可能需要使用 Set 的不同实现,具体取决于您的需要)。

    public static void main(String[] args) {
    double d = 0.0; //d is set to some unused starting value so it will compile.
    double average;
    double max;
    double min;

    Set<Double> values = new HashSet<Double>();
    Scanner input = new Scanner(System.in);
    while (true) {
    try {
    System.out.println("Enter a double value (-999 to exit):");
    d = input.nextDouble();
    } catch (InputMismatchException e) {
    System.out.println("That is not a valid double value.");
    input.nextLine();
    continue;

    } catch (Exception e) {
    System.out.println("Error");
    break;
    }
    if(d == -999.)
    break;
    else if(!values.add(d))
    System.out.println("Duplicate value");
    }
    //System.out.println(values);
    }

    我还建议您将“value”重命名为“values”,以明确它代表多个值。

    希望这有帮助!

    关于java - 使用哨兵控制循环不断请求 double 值的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60499229/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com