Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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 如何处理BigDecimal的错误用户输入_Java_Java.util.scanner - Fatal编程技术网

Java 如何处理BigDecimal的错误用户输入

Java 如何处理BigDecimal的错误用户输入,java,java.util.scanner,Java,Java.util.scanner,我正在写JAVA代码,用户输入是BigDecimal。之前,我编写了do while check for integer输入,如下所示: int number= 0; do { System.out.print("Enter number: "); number= scan.nextInt(); } while (number< 0); 如何处理错误的用户输入,如int,例如,

我正在写JAVA代码,用户输入是BigDecimal。之前,我编写了do while check for integer输入,如下所示:

        int number= 0;
        do {
            System.out.print("Enter number: ");
            number= scan.nextInt();
        }
        while (number< 0);

如何处理错误的用户输入,如int,例如,如果用户输入-10,00或如果他输入10.00(应该是10,00)?

Scanner类具有扫描不同语言环境中的数字的功能,为此,您可以使用useLocale()和reset()方法。此外,还可以调用hasNextBigDecimal()方法,该方法返回true/false。

在BigDecimal中未定义,因此必须使用compareTo()方法。compareTo()的返回值为0、-1和1

返回:-101,因为此大小数在数字上小于、等于或大于val

查看下面的代码

  • 首先,将价格作为输入,转换为BigDecimal
  • 然后使用compareTo()方法对转换后的价格进行比较,以检查价格是正还是负
  • 如果价格为正,则保持价格不变,否则将其转换为负
  • publicstaticvoidmain(字符串[]args){
    扫描仪扫描=新扫描仪(System.in);
    系统输出打印项次(“输入价格”);
    BigDecimal price=scan.nextBigDecimal();
    if(price.compareTo(BigDecimal.ZERO)>0){
    System.out.println(“价格大于0(正)”);
    /*写下你的商业逻辑*/
    }else if(price.compareTo(BigDecimal.ZERO)<0){
    System.out.println(“价格小于0(负)”);
    /*此行将负价格转换为正价格*/
    price=price.multiply(新的大十进制(“-1”);
    /*写下你的商业逻辑*/
    }
    }
    
    首先了解如何向程序报告错误(文档是一个很好的来源)。其次,用你喜欢的方式处理错误。。过来看;这将是你的朋友。你将如何准确地包装价格?是否在输入时再次返回用户,并向其提供有关not vaid Entry的消息,以便其再次输入?我用谷歌搜索了一下,但我不清楚:(您将如何包装然后BigDecimal扫描输入的价格?返回用户输入,并提供有关not vaid Entry的消息,让他再次输入?我添加了新的答案和解释以及代码。希望这有助于解决您的问题。非常感谢,我正在考虑处理它,更像是返回用户在上一步,如果他输入错误,可能要用hasNextBigDecimal()方法检查它,只是我不确定如何实现它…我尝试过,但我认为我创建了无限循环:/
            BigDecimal price = scan.nextBigDecimal();
            scan.nextLine();
    
    public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            System.out.println("Enter price");
            BigDecimal price = scan.nextBigDecimal();
    
            if (price.compareTo(BigDecimal.ZERO) > 0) {
                System.out.println("Price is greater than 0(positive)");
    
                 /*....Write your business logic....*/
    
            } else if (price.compareTo(BigDecimal.ZERO) < 0) {
                System.out.println("Price is less than 0(negative)");
    
                /* This line converts negative price to positive */
                price = price.multiply(new BigDecimal("-1"));
    
                /*....Write your business logic....*/
    
            }
        }