Scanner & BigInteher & BigDecimal

来源:互联网 发布:复制linux系统 编辑:程序博客网 时间:2024/06/04 08:45


    对于java来说获取控制台输入数据,我们肯定不会忽略一个类位于java.util.Scanner  好像就是为我们参加比赛或者其他测试性的数据二量身打造的,那我们一起来看看其中的用法吧。首先我们看它对应的构造方法以后可能用到的 Scanner(String file)   Scanner(InputStream source)   Scanner(String source)  相关的自己查询API 

我们看api不难发现一个成对出现的方法:hasNextXxx()     nextXxx()  那你肯定就明白怎么取得相应的吧(默认我们的扫描器是按照空格进行扫描区分割的,你可以自己按照你所需的进行拆分获取标记利用正则表达式)

常用的方法有:

   hasNext()

   hasNext(Pattern pattern)   可以设置相应的匹配模式

   hasNext(String pattern)  下一个标记从指定字符串构造模式匹配

  hasNextInt()

  hasNextLine()  是否存在一行

  hasNextDouble()

  hasNext

   hasNextBigDecimal()  大实数

   hasNextBigInteher() 大整数

   其他的我就不一 一列举啦

   next()  获取的是下一个标记

   nextLine()、 nextDouble()、nextInt()、nextBIgDecimal()、nextInteger()


  useDelimiter(Patter pattern)采用指定的分割模式

  我只演示一个例子就清楚啦

import java.io.BufferedInputStream;import java.util.Scanner;public class ScannerTest {/* * @author cai * @date 2014-5-9 15:33:18 * @result  practice  Scanner class and apply it's method * common construction method such as * Scanner(String file) * Scanner(InputStream source) * Scanner(String source) *  *  *  *  *  */public static void main(String[] args) {// java.util.Scanner  init Scanner class   Scanner scanner = new Scanner(new  BufferedInputStream(System.in) );String str = null;while (scanner.hasNextLine()) {System.out.println(scanner.nextLine());}}}

BigInteger  BigDecimal在大数运算的时候的非常easy   还有精度值 (MathContext  、RoundinMode)

位于java.math.*;在这个包下面  我只例举啦BigDecimal我想你肯定会举一反三吧  另外一个类里面的方法也差不多

构造方法BigDecimal(BigInteger val)  Bigdecimal(String val)  BigDecimal(String val,MathContext mc) BigDecimal(char[] in)  BigDecimal(double val)  BigDecimal(double val,MathContext mc)(需要知道其他的构造方法查询API)

还有一些成员变量 ZERO  TEN   ROUND_CEILING ROUND_DOWN  (舍去模式)

and(BigDecimal val) 进行&操作  and(BigDecimal val)  subtract(BigDecimal val)  abs(BigDecimal val)  mutiply(BigDecimal val)    divide(BigDecimal val)  remainder(BigDecimal val)

movePointLeft(int n)   movePointRight(int n)   round(MathContext mc)   setScale(int newScale) 设置新标度 stripTrailingZeros()   返回数值上等于此小数,但从该表示形式移除所有尾部零的BigDecimaltoPlainString()返回不带指数字段的此BigDecimal 的字符串表示形式。pow(int n)


public enum RoundingMode

 根据给定的舍入模式将输入数字舍入为一位数的结果输入数字UPDOWNCEILINGFLOORHALF_UPHALF_DOWNHALF_EVENUNNECESSARY5.56565656抛出 ArithmeticException2.53232322抛出 ArithmeticException1.62121222抛出 ArithmeticException1.12121111

抛出 ArithmeticException


1.011111111-1.0-1-1-1-1-1-1-1-1-1.1-2-1-1-2-1-1-1抛出 ArithmeticException-1.6-2-1-1-2-2-2-2抛出 ArithmeticException-2.5-3-2-2-3-3-2-2抛出 ArithmeticException-5.5-6-5-5-6-6-5-6抛出 ArithmeticException



MathContext 这个类主要是设置其精度 构造方法MathContext(int setPrecision)设置精度值   MathContext(int setPrecision,RoundingMode setRoundingMode)  使用指定的精度和舍入模式构造一个新的MathContext

import java.io.BufferedInputStream;import java.math.BigDecimal;import java.math.MathContext;import java.math.RoundingMode;import java.util.Scanner;public class ScannerTest {/* * @author cai * @date 2014-5-9 15:33:18 * @result  practice  Scanner class and apply it's method * common construction method such as * Scanner(String file) * Scanner(InputStream source) * Scanner(String source) *  *  *  *  *  */public static void main(String[] args) {// java.util.Scanner  init Scanner class   Scanner scanner = new Scanner(new  BufferedInputStream(System.in) );String str = null;while (scanner.hasNextLine()) {BigDecimal val = scanner.nextBigDecimal();val.setScale(8);//小数点后面数有几位System.out.println("ulp method表示最低位数量级"+val.ulp());System.out.println("scale 表示小数点后面的位数 也就是精确的位数"+val.scale());System.out.println("返回其精度"+val.precision()+"设置其精度 是从左向右数"+val.round(new MathContext(8, RoundingMode.UP)).toPlainString()+"  " +val.precision());}}}


0 0