对于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() 返回数值上等于此小数,但从该表示形式移除所有尾部零的BigDecimal。toPlainString()返回不带指数字段的此BigDecimal 的字符串表示形式。pow(int n)
public enum RoundingMode
根据给定的舍入模式将输入数字舍入为一位数的结果 | ||||||||
---|---|---|---|---|---|---|---|---|
输入数字 | UP | DOWN | CEILING | FLOOR | HALF_UP | HALF_DOWN | HALF_EVEN | UNNECESSARY |
5.5 | 6 | 5 | 6 | 5 | 6 | 5 | 6 | 抛出 ArithmeticException |
2.5 | 3 | 2 | 3 | 2 | 3 | 2 | 2 | 抛出 ArithmeticException |
1.6 | 2 | 1 | 2 | 1 | 2 | 2 | 2 | 抛出 ArithmeticException |
1.1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 抛出 ArithmeticException
|
1.0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
-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());
}
}
}