zoukankan      html  css  js  c++  java
  • 关于输入价格问题,即输入数字大于0的数字

    问题前提:

     当输入价格的时候,往往是不清楚是整数还是小数,想最后是当用户输入是整数的时候就自动变为整数,输入小数变为小数,而且价格是要求是大于0的数字, 这样才合理,下面是我的尝试,

                       用正则表达式

    1.开始的时候写了一个能够判断为整数的方法

    /**
    * 判断是否为大于0的整数
    *
    * @param str
    * @return
    */
    public static double isInteger(String str) {
    double result;
    // Pattern pattern = Pattern.compile("^1[-\+]?[\d]*$");
    Pattern pattern = Pattern.compile("^[1-9][\d]*$");

    if (!pattern.matcher(str).matches()) {
    System.out.println("你输入的不是数字或不合法,请重新输入大于0的数字!");
    Scanner sc = new Scanner(System.in);
    result = isInteger(sc.next());
    } else {
    result = Double.parseDouble(str);
    }

    return result;
    }

    还行,能够应付一些各种不和发的输入

    2.当加上了这个能够判断的小数的

    public static double isData(String str) {
      double result = 0;
      Scanner sc =new Scanner(System.in);
      Pattern pattern = Pattern.compile("^[1-9][\d]*$");
      Pattern pattern2 = Pattern.compile("^[0-9]+.*[0-9]*");
      if(".".equals(str)){
        System.out.println("你输入的不是数字或不合法,请重新输入大于0的数字!");
      }else
      if (!pattern.matcher(str).matches()){
        if (!pattern2.matcher(str).matches()){  
          System.out.println("你输入的不是数字或不合法,请重新输入大于0的数字!");
           result = isData(sc.next());
        }else{
          result = Double.parseDouble(str);
        }
      }else{
        result = Integer.parseInt(str);
      }

      return result;
    }

    上面看上去还过的去,但是还是不行

    特别是输入23-2 或2222 ,就挂了

     3.最后字网上荡一个

    //采用正则表达式的方式来判断一个字符串是否为数字,这种方式判断面比较全
    //可以判断正负、整数小数
    Boolean strResult = str.matches("-?[0-9]+.*[0-9]*");
    if(strResult == true) {
    System.out.println("Is Number!");
    } else {
    System.out.println("Is not Number!");
    }

     

    对于这个问题,我最终选则了  java的自带方方法

    public static void main(String[] args) {
      String a="null";
      isDilg();
    }
    /**
    * 判断输入一个数字为大于0的整数或小数
    */
    public static void isDilg(){
      int i=0;
      Double d = null;
      System.out.println(" sdf");
      Scanner sc =new Scanner(System.in);
      do{
        int a=-2;
        if(!sc.hasNextInt()){
        if(!sc.hasNextDouble()){
          System.out.println("------------");
          System.out.println("你输入的的不合法,请重新输入!");
          isDilg();
        }else{
          d=sc.nextDouble();
          if(d>0){
          System.out.println(d);
        }else{
          System.out.println("你输入的的不合法,请重新输入!");
          isDilg();
        }
       }
      }else{
        i=sc.nextInt();
        if(i>0){
          System.out.println(i);
        }else{
          System.out.println("你输入的的不合法,请重新输入!");
          isDilg();
        }
       }
      }while(true);
    }

    不错,还行,没有搞死,还是人家java方法好用,这个确实对于一个不是正则表达式不太会用的,而且考虑不全的的同学,

    还是用 java  API 简单!

  • 相关阅读:
    C#中属性和字段的区别
    利用原生态的(System.Web.Extensions)JavaScriptSerializer将mvc 前台提交到controller序列化复杂对象
    点击图片后放大居中显示
    Python logging模块
    MySQL免安装版 配置
    python 字符串 常用方法
    python 格式化输出
    欢迎使用CSDN-markdown编辑器
    Program received signal SIGSEGV, Segmentation fault.
    error MSB6006: “CL.exe”已退出,代码为 -1073741502。
  • 原文地址:https://www.cnblogs.com/nucdy/p/5622833.html
Copyright © 2011-2022 走看看