Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用sentinel控制回路,持续请求双值的程序_Java_Exception_Sentinel_Inputmismatchexception_Arraystoreexception - Fatal编程技术网

Java 使用sentinel控制回路,持续请求双值的程序

Java 使用sentinel控制回路,持续请求双值的程序,java,exception,sentinel,inputmismatchexception,arraystoreexception,Java,Exception,Sentinel,Inputmismatchexception,Arraystoreexception,因此,我正在开发一个Java程序,它不断地向用户请求双值。我应该使用sentinel值为-999的sentinel控制回路。在使用try/catch块处理输入不匹配异常、ArrayStoreException和常规异常时,我需要使用ArrayList public static void main(String[] args) { double d; double average; double max; double min;

因此,我正在开发一个Java程序,它不断地向用户请求双值。我应该使用sentinel值为-999的sentinel控制回路。在使用try/catch块处理输入不匹配异常、ArrayStoreException和常规异常时,我需要使用ArrayList

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");
        }

        }

    }
在输入-999、应用ArrayStoreExceptions中的重复消息以及在输入失配异常后继续输入时,我当前在尝试完成程序时遇到问题

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");
        }

        }

    }
publicstaticvoidmain(字符串[]args){
双d;
双倍平均;
双峰;
双分钟;
ArrayList值=新的ArrayList();
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入双精度值(-999以退出):”;
d=输入.nextDouble();
而(!value.equals(-999)){
试一试{
System.out.println(“输入双精度值(-999以退出):”;
value.add(input.nextDouble());
}捕获(输入不匹配异常e){
System.out.println(“这不是有效的双精度值。”);
}捕获(ArrayStore异常){
System.out.println(“重复值”);
}捕获(例外e){
System.out.println(“错误”);
}
}
}
  • 你正在使用
  • 但值是一个
    ArrayList
    ,而-999只是一个
    双精度
    (实际上是一个int)。 您不想检查整个列表是否等于-999,只想检查最后输入的值是否为-999

  • 如果不希望允许重复,则应使用,而不是
    ArrayList

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

  • 下面是对您的代码进行的(经过大量修改)修改,它应该按照您的意愿工作: (根据您的需要,您可能希望使用不同的
    Set
    实现)

    publicstaticvoidmain(字符串[]args){
    double d=0.0;//d被设置为一些未使用的起始值,因此它将编译。
    双倍平均;
    双峰;
    双分钟;
    Set values=新的HashSet();
    扫描仪输入=新扫描仪(System.in);
    while(true){
    试一试{
    System.out.println(“输入双精度值(-999以退出):”;
    d=输入.nextDouble();
    }捕获(输入不匹配异常e){
    System.out.println(“这不是有效的双精度值。”);
    input.nextLine();
    继续;
    }捕获(例外e){
    System.out.println(“错误”);
    打破
    }
    如果(d==-999.)
    打破
    如果(!values.add(d))
    System.out.println(“重复值”);
    }
    //System.out.println(值);
    }
    
    我还建议您将“value”重命名为“values”,以明确它代表多个值


    希望这有帮助

    arraylist永远不会等于double,也许您想根据输入的值进行测试?如果您想在输入-999之前请求多个输入,则需要在循环内请求输入,或者,就在循环之前。你能给我举个例子吗?我需要使用ArrayList作为作业的一部分,但谢谢,我应该能够使用它作为模板来帮助我计算它,所以我在输入-999时设法让程序结束,如果输入非双精度值,则发送错误消息,但现在我只需要了解如何使用ArrayStoreException检测重复值
    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);
        }