zoukankan      html  css  js  c++  java
  • 1.24 Java周末总结 ①乘法数据的溢出 ②测试random随机数几率是否相等 ③判断字符串是否为纯数字

    一、乘法数据的溢出

    背景:在算阶乘时,当数字太大后,结果为0,此时引出了数据在算乘法时数据的溢出  10!或者100!

    byte   8位    8! = -27=-128 (转换到byte允许数据范围内)       9!等于8!    10!=0

    short  16位   16!= -215 (转换到short允许数据范围内)      17!等于16!  18!=0

    int    32位   32!=-231 (转换到int允许数据范围内)       33!等于32!  34!=0

    long  64位     64!=-263 (转换到long允许数据范围内)      65!等于64!  65!=0

    说明在等于数据类型它自己的位数时,等于负的最小值,

    在下一阶乘时也等于最小负值(n个数据一圈个数,比如byte就是n个28

    在下一阶乘时等于0,即n个半圈,比如byte类型就是n个128(27

    结论:算阶乘时即数据类型那位和下一位等于最小值,加2位为0

    测试代码如下:

    byte a = 1;
    for(byte n = 1; n < 100;n++){
      a = (byte)(a * n);
      System.out.println(n+"!"+"="+a);
    }

    int b = 1;
      for(int n = 1; n < 100;n++){
      b = (int)(b * n);
    System.out.println(n+"!"+"="+b);
    }

    测试结果如下:

    同理,short和long型一样;double因为有小数,所以结果是无穷大,结果如下

    根据结果可改成如下的数学表达式,还没有推理证实

    int sum = 1*2*3*4*.......*32 = -231+n*232  (n为正整数,且这是0到32以内第一个可以表达的,即乘到32时n为可以的最小正整数,)

    byte sum = 1*2*3*...*8   = -128+n*28

     二、测试random随机数几率是否相等

    背景,在调用系统随机数产生的时候,不清楚源代码,想测试一下随机数的概率

    测试代码如下:

    public class Random_Test {
      public static void main(String[] args) {
        int random = 0;
        int times = 10000000;//生成随机数的次数
        int random_Range = 100;//生成随机数的范围

        int[] arry = new int[random_Range];
        for (int i = 0; i < times; i++) {
          random = (int) (Math.random() * random_Range);
          arry[random] += 1; ////生成的随机数是多少,对应的就+1
        }

        for (int i = 0; i < random_Range; i++) {
          System.out.println("arry[" + i + "]" + arry[i] + " " + arry[i] * 100.0 / times + "%");
         }
        System.out.println("产生的数字 次数 百分比");
        System.out.println("理论次数"+times/random_Range+" "+"理论百分比"+1.0/random_Range*100+"%");
      }
    }

    测试结果如下:

    三、判断数字是否为纯数字:

     思路:取出每一位,判断是否为0-9,不是则跳出,返回false

    下面是网上搜一些代码:

    ava中判断字符串是否为数字的方法:

    1.用JAVA自带的函数
    public static boolean isNumeric(String str){
      for (int i = 0; i < str.length(); i++){
        System.out.println(str.charAt(i));//转换为字符
        if (!Character.isDigit(str.charAt(i))){//判断是否为数字,同理包含的方法有是否为字母(大小写字母),是否为字母或数字,是否为空白字符
          return false;
        }
      }
      return true;
    }

    2.用正则表达式
    首先要import java.util.regex.Pattern 和 java.util.regex.Matcher
    public boolean isNumeric(String str){
      Pattern pattern = Pattern.compile("[0-9]*");
      Matcher isNum = pattern.matcher(str);
      if( !isNum.matches() ){
        return false;
      }
      return true;
    }

    第1种方式只能校验不含负号“-”的数字,即输入一个负数-199,输出结果将是false;
    而第二方式则可以通过修改正则表达式实现校验负数,将正则表达式修改为“^-?[0-9]+”即可,修改为“-?[0-9]+.?[0-9]+”即可匹配所有数字。

    方法一:利用正则表达式

    public static void main(String[] args){
      String str="123456";
      boolean result=str.matches("[0-9]+");
      if (result == true) {
        System.out.println("该字符串是纯数字");
      }else{
        System.out.println("该字符串不是纯数字");
      }
    }

    方法二:利用Pattern.

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class Testone {
      public static void main(String[] args){
        String str="123456";
        Pattern pattern = Pattern.compile("[0-9]{1,}");
        Matcher matcher = pattern.matcher((CharSequence)str);
        boolean result=matcher.matches();
        if (result == true) {
          System.out.println("该字符串是纯数字");
        }else{
        System.out.println("该字符串不是纯数字");
        }
      }
    }

    方法一:用JAVA自带的函数
    public static boolean isNumeric(String str){
      for (int i = str.length();--i>=0;){
        if (!Character.isDigit(str.charAt(i))){
          return false;
        }
      }
      return true;
    }


    方法二:
    /*
    * 判断是否为整数
    * @param str 传入的字符串
    * @return 是整数返回true,否则返回false
    */

    public static boolean isInteger(String str) {
      Pattern pattern = Pattern.compile("^[-\+]?[\d]*$");
      return pattern.matcher(str).matches();
    }


    方法三:
    public static boolean isNumeric(String str){
      Pattern pattern = Pattern.compile("[0-9]*");
      return pattern.matcher(str).matches();
    }


    方法四:
    public final static boolean isNumeric(String s) {
      if (s != null && !"".equals(s.trim())) {
        return s.matches("^[0-9]*$");
      }else{  
        return false;

      }

    }


    3方法五:用ascii码
    public static boolean isNumeric(String str){
      for(int i=str.length();--i>=0;){
        int chr=str.charAt(i);   // char转换为int后为它的ASCII值
        if(chr<48 || chr>57)
          return false;
        }
        return true;
    }

  • 相关阅读:
    C#学习五
    C#学习二
    C#学习五
    完成车牌识别,自行拍车牌图片进行上传并查看结果
    C#学习
    简述ASP.NET网站开发步骤
    C#学习四
    C#学习三
    完成身份证识别,自行拍摄身份证图片进行上传并查看结果
    C#学习总结
  • 原文地址:https://www.cnblogs.com/chenyuanqiu2008/p/5155183.html
Copyright © 2011-2022 走看看