zoukankan      html  css  js  c++  java
  • Java常用类(二) Scanner类和大数类

    二、Scanner类

    有C系语言基础的可能都比较熟悉scanf("%d",&a);和cin>>a;这种代码,也打开了程序交互的第一道门。因此,这些程序员开始学Java时都会先找输入输出(指标准输入输出),Java的输出就非常常见,任何一个Java教程基本都是以输出开始的,然而输入却在很后面提到,因为Java的输入不似输出那么简单。现在我们就来介绍一下实现输入的Scanner类。

    1.Scanner基本使用方法和next()系列方法

    一个从键盘输入的基本示例:

    import java.util.Scanner;
    
    public class Scan {
        public static void main(String []args)
        {
            Scanner sc=new Scanner(System.in);
            String s=sc.next();
            System.out.println(s);
        }
    }

    绿色的输入,以回车结束,而白色的是输出,可以看出next()方法只能读取空格前的字符串,想要读取空格,可以使用nextLine()方法:

            String s=sc.nextLine();

    此外,还有nextInt()、nextLong()等除Charater之外的包装类输入,还有nextBigDecimal()和BigInteger等大数类。以Integer为例:

            Integer s= sc.nextInt();

    如果你输入的不是integer类型,则会抛出如下异常

    当然,Integer可以转Float。

    2.hasNext()系列方法

            while(sc.hasNext()) {
                String s = sc.next();
                if(s.equals("exit"))
                    break;
                else
                System.out.println(s);

    所以Scanner类基本没有什么内容了,就结束吧!

    三、Java大数类

    1.BigInteger

    大整数,还能记得之前博客"Java-20180409"中稍微涉及到BigInteger的使用,当时算法所测试的数极大,超过long的最大值,因此引出BigInteger,虽然简单,但基本内容齐全。int类型的取值范围是-2*32到2^32-1

            System.out.println(Integer.MAX_VALUE-Math.pow(2,31));
            System.out.println(Integer.MIN_VALUE+Math.pow(2,31));

    结果分别是-1.0和0.0。同理long的大小范围是-2^63到2^63之间。

    而BigInteger是通过int数组联合来存储比特位,但是BigInteger并未重载常用的+-*/%等符号(不知道Java是否可以),因此我们必须采用成员方法的方式进行加减乘除操作,在此之前必须要介绍一下构造函数,BigInteger的构造函数非常多,大概八九种吧,咱们找常见的介绍一下:

    import java.math.BigInteger;
    
    public class Big {
        public static void main(String []args)
        {
            BigInteger bi=new BigInteger("63333333333333333333");
            System.out.println(bi);
            BigInteger b2=BigInteger.valueOf(3333333333333333333l);
            System.out.println(b2);
            System.out.println(bi.add(b2));
        }
    }

     

    好像最常用的就是String为参数。。。。

            System.out.println(bi.subtract(b2));
            System.out.println(bi.multiply(b2));
            System.out.println(bi.divide(b2));
            BigInteger [] i= bi.divideAndRemainder(b2);
            System.out.println(i[0]);
            System.out.println(i[1]);

    以上结果分别为减乘除以及求商和余数的操作(返回BigInteger数组含有两个元素,第一个是商,第二个是余数)。

    此外,常用的操作可能还有:

     2.BigDecimal

    BigInteger是为了存储大整数,而BigDecimal则是为了存储大且精的浮点数,还是先来看一下构造函数,主要有String和double两种类型,而加减乘操作也类似于BigInteger;我们重点关注除法:

            BigDecimal bd=new BigDecimal(1.0);
            BigDecimal d2=new BigDecimal("3.2");
            System.out.println(bd.divide(d2));
            System.out.println(bd.divide(d2,3,BigDecimal.ROUND_UP));

    第一种是普通除法,但是结果不能是无限小数,否则抛出异常!

    第二种就是更方便的除法,第二个参数是保留位数,第三个是如何舍入,比如上述例子中就是保留三位小数,但是向上进位。即整数趋向正无穷,负数趋向负无穷。

    还有ROUND_DOWN总是舍去后面的数位,即趋向0;ROUND_CEILING向上取值,永远趋向正无穷。;ROUND_FLOOR向下取值,永远趋向负无穷;ROUND_HALF_DOWN四舍五入操作,若小于等于5舍弃,大于5进位操作;ROUND_HALF_UP四舍五入操作,小于5舍弃,大于等于5进位;ROUND_HALF_EVEN银行家舍入,银行家舍入有一个口诀:

    四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一

    即当最后一位为5时,总是要保证舍入后为偶数:

            BigDecimal bd=new BigDecimal(1.0);
            BigDecimal d2=new BigDecimal("4.0");
    //        System.out.println(bd.divide(d2));
            System.out.println(bd.divide(d2,1,BigDecimal.ROUND_HALF_EVEN));
            BigDecimal d3=new BigDecimal(3.5);
            BigDecimal d4=new BigDecimal("10.0");
            System.out.println(d3.divide(d4,1,BigDecimal.ROUND_HALF_EVEN));

    上述程序结果分别为0.25和0.35,因此保留一位小数最后的结果是:

    四、Random类

  • 相关阅读:
    OCP-052考试题库汇总(35)-CUUG内部解答版
    OCP-052考试题库汇总(34)-CUUG内部解答版
    018 ThreadLocal实现线程安全
    017 无锁与CAS
    016 原子类
    015 可见性问题与volatile
    014 锁重入
    013 synchronized的优化
    012 内置锁和synchronized
    011 线程安全性问题
  • 原文地址:https://www.cnblogs.com/lbrs/p/11071081.html
Copyright © 2011-2022 走看看