Java在ACM中的应用
—. 在java中的基本头文件(java中叫包)
import java.io.*;
import java.util.*; //输入Scanner
import java.math.*; //BigInteger && BigDecimal
二. 输入与输出
读入: Scanner cin = new Scanner (System.in);
推荐:Scanner cin = new Scanner (new BufferedInputStream (System.in));
Scanner cin = new Scanner(System.in);
类名 对象名 构造函数 参数
Scanner类提供了非常丰富的成员函数来负责读取各种数据类型:
返回值 成员函数
boolean hasNext()
相当于C++的!=EOF
String next(String pattern)
如果下一个标记与从指定字符串构造的模式匹配,则返回下一个标记,
如果参数为空,就是读取一个字符串
BigDecimal nextBigDecimal()
将输入信息的下一个标记扫描为一个 BigDecimal。
BigInteger nextBigInteger()
将输入信息的下一个标记扫描为一个 BigInteger。
boolean nextBoolean()
扫描解释为一个布尔值的输入标记并返回该值。
byte nextByte()
将输入信息的下一个标记扫描为一个 byte。
double nextDouble()
将输入信息的下一个标记扫描为一个 double。
float nextFloat()
将输入信息的下一个标记扫描为一个 float。
int nextInt()
将输入信息的下一个标记扫描为一个 int。
String nextLine()
此扫描器执行当前行,并返回跳过的输入信息。
long nextLong()
将输入信息的下一个标记扫描为一个 long。
short nextShort()
将输入信息的下一个标记扫描为一个 short。
对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类,
import java.text.*;
DecimalFormat f = new DecimalFormat("#.00#");
DecimalFormat g = new DecimalFormat("0.000");
double a = 123.45678, b = 0.12;
System.out.println(f.format(a)); //123.457
System.out.println(f.format(b)); //.12
System.out.println(g.format(b)); //0.120
System.out.print(); // cout << …;
System.out.println(); //与C++的cout << … <<endl;
System.out.printf(); //与C中的printf用法类似.
三. 定义变量
定义单个变量:
int a,b,c; //和C++ 中无区别
BigInteger a; //定义大数变量a
BigInteger b = new BigInteger ("2"); //定义大数变量 b赋值为 2;
BigDecimaln; //定义大浮点数类 n;
boolean : 布尔值,仅有两个值,true和false.
byte :字节类型值,长度8位(一个字节),范围-128至127。
short:短整型值,长度16位(两个字节),范围-32768至32767。
int:整型值,长度32位(四个字节),范围-2147483648至2147483647
long:长整型,长度64位(八个字节),范围-9223372036854775808至9223372036854775807
float:单精度浮点数,长度32位(四个字节)。
double:双精度浮点数,长度64位(八个字节)。
char:字符型,长度16位,支持所有的UCS-2和ASCII编码。
除了以上的8种基本数据类型,对于ACMer还有BigInteger,BigDecimal,String三个类经常使用.
四.写法
import java.math.*;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
}
}
五.注意事项
(1) Java 是面向对象的语言,思考方法需要变换一下,里面的函数统称为方法,不要搞错。
(2) Java 里的数组有些变动,多维数组的内部其实都是指针,所以Java不支持fill多维数组。数组定义后必须初始化,如 int[] a = new int[100];
(3) 布尔类型为 boolean,只有true和false二值,在 if (...) / while (...) 等语句的条件中必须为boolean类型。 在C/C++中的 if (n % 2) ... 在Java中无法编译通过。
(4) 下面在java.util包里Arrays类的几个方法可替代C/C++里的memset、qsort/sort 和 bsearch:
Arrays.fill()
Arrays.sort()
Arrays.binarySearch()
BigInteger
java.math
类 BigInteger
java.lang.Object
java.lang.Number
java.math.BigInteger
所有已实现的接口:
Serializable, Comparable<BigInteger>
public class BigInteger
extends Number
implements Comparable<BigInteger>
不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
算术运算的语义完全模仿 Java 整数算术运算符的语义,如 The Java Language Specification 中所定义的。例如,以零作为除数的除法抛出 ArithmeticException,而负数除以正数的除法则产生一个负(或零)的余数。Spec 中关于溢出的细节都被忽略了,因为 BigIntegers 所设置的实际大小能适应操作结果的需要。
位移操作的语义扩展了 Java 的位移操作符的语义以允许产生负位移距离。带有负位移距离的右移操作会导致左移操作,反之亦然。忽略无符号的右位移运算符(>>>),因为该操作与由此类提供的“无穷大的词大小”抽象结合使用时毫无意义。
逐位逻辑运算的语义完全模仿 Java 的逐位整数运算符的语义。在执行操作之前,二进制运算符(and、or、xor)对两个操作数中的较短操作数隐式执行符号扩展。
比较操作执行有符号的整数比较,类似于 Java 的关系运算符和相等性运算符执行的比较。
提供的模算术操作用来计算余数、求幂和乘法可逆元。这些方法始终返回非负结果,范围在 0 和 (modulus - 1)(包括)之间。
位操作对其操作数的二进制补码表示形式的单个位进行操作。如有必要,操作数会通过扩展符号来包含指定的位。单一位操作不能产生与正在被操作的 BigInteger 符号不同的 BigInteger,因为它们仅仅影响单个位,并且此类提供的“无穷大词大小”抽象可保证在每个 BigInteger 前存在无穷多的“虚拟符号位”数。
字段摘要 |
|
static BigInteger |
ONE |
static BigInteger |
TEN |
static BigInteger |
ZERO |
构造方法摘要 |
|
BigInteger(byte[] val) |
|
BigInteger(int signum, byte[] magnitude) |
|
BigInteger(int bitLength, int certainty, Random rnd) |
|
BigInteger(int numBits, Random rnd) |
|
BigInteger(String val) |
|
BigInteger(String val, int radix) |
方法摘要 |
|
BigInteger |
abs() |
BigInteger |
add(BigInteger val) |
BigInteger |
and(BigInteger val) |
BigInteger |
andNot(BigInteger val) |
int |
bitCount() |
int |
bitLength() |
BigInteger |
clearBit(int n) |
int |
compareTo(BigInteger val) |
BigInteger |
divide(BigInteger val) |
BigInteger[] |
divideAndRemainder(BigInteger val) |
double |
doubleValue() |
boolean |
equals(Object x) |
BigInteger |
flipBit(int n) |
float |
floatValue() |
BigInteger |
gcd(BigInteger val) |
int |
getLowestSetBit() |
int |
hashCode() |
int |
intValue() |
boolean |
isProbablePrime(int certainty) |
long |
longValue() |
BigInteger |
max(BigInteger val) |
BigInteger |
min(BigInteger val) |
BigInteger |
mod(BigInteger m) |
BigInteger |
modInverse(BigInteger m) |
BigInteger |
modPow(BigInteger exponent, BigInteger m) |
BigInteger |
multiply(BigInteger val) |
BigInteger |
negate() |
BigInteger |
nextProbablePrime() |
BigInteger |
not() |
BigInteger |
or(BigInteger val) |
BigInteger |
pow(int exponent) |
static BigInteger |
probablePrime(int bitLength, Random rnd) |
BigInteger |
remainder(BigInteger val) |
BigInteger |
setBit(int n) |
BigInteger |
shiftLeft(int n) |
BigInteger |
shiftRight(int n) |
int |
signum() |
BigInteger |
subtract(BigInteger val) |
boolean |
testBit(int n) |
byte[] |
toByteArray() |
String |
toString() |
String |
toString(int radix) |
static BigInteger |
valueOf(long val) |
BigInteger |
xor(BigInteger val) |
BigDecimal
java.math
类 BigDecimal
java.lang.Object
java.lang.Number
java.math.BigDecimal
所有已实现的接口:
Serializable, Comparable<BigDecimal>
public class BigDecimal
extends Number
implements Comparable<BigDecimal>
不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。
字段摘要 |
|
static BigDecimal |
ONE |
static int |
ROUND_CEILING |
static int |
ROUND_DOWN |
static int |
ROUND_FLOOR |
static int |
ROUND_HALF_DOWN |
static int |
ROUND_HALF_EVEN |
static int |
ROUND_HALF_UP |
static int |
ROUND_UNNECESSARY |
static int |
ROUND_UP |
static BigDecimal |
TEN |
static BigDecimal |
ZERO |
构造方法摘要 |
|
BigDecimal(BigInteger val) |
|
BigDecimal(BigInteger unscaledVal, int scale) |
|
BigDecimal(BigInteger unscaledVal, int scale, MathContext mc) |
|
BigDecimal(BigInteger val, MathContext mc) |
|
BigDecimal(char[] in) |
|
BigDecimal(char[] in, int offset, int len) |
|
BigDecimal(char[] in, int offset, int len, MathContext mc) |
|
BigDecimal(char[] in, MathContext mc) |
|
BigDecimal(double val) |
|
BigDecimal(double val, MathContext mc) |
|
BigDecimal(int val) |
|
BigDecimal(int val, MathContext mc) |
|
BigDecimal(long val) |
|
BigDecimal(long val, MathContext mc) |
|
BigDecimal(String val) |
|
BigDecimal(String val, MathContext mc) |
方法摘要 |
|
BigDecimal |
abs() |
BigDecimal |
abs(MathContext mc) |
BigDecimal |
add(BigDecimal augend) |
BigDecimal |
add(BigDecimal augend, MathContext mc) |
byte |
byteValueExact() |
int |
compareTo(BigDecimal val) |
BigDecimal |
divide(BigDecimal divisor) |
BigDecimal |
divide(BigDecimal divisor, int roundingMode) |
BigDecimal |
divide(BigDecimal divisor, int scale, int roundingMode) |
BigDecimal |
divide(BigDecimal divisor, int scale, RoundingMode roundingMode) |
BigDecimal |
divide(BigDecimal divisor, MathContext mc) |
BigDecimal |
divide(BigDecimal divisor, RoundingMode roundingMode) |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor) |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor, MathContext mc) |
BigDecimal |
divideToIntegralValue(BigDecimal divisor) |
BigDecimal |
divideToIntegralValue(BigDecimal divisor, MathContext mc) |
double |
doubleValue() |
boolean |
equals(Object x) |
float |
floatValue() |
int |
hashCode() |
int |
intValue() |
int |
intValueExact() |
long |
longValue() |
long |
longValueExact() |
BigDecimal |
max(BigDecimal val) |
BigDecimal |
min(BigDecimal val) |
BigDecimal |
movePointLeft(int n) |
BigDecimal |
movePointRight(int n) |
BigDecimal |
multiply(BigDecimal multiplicand) |
BigDecimal |
multiply(BigDecimal multiplicand, MathContext mc) |
BigDecimal |
negate() |
BigDecimal |
negate(MathContext mc) |
BigDecimal |
plus() |
BigDecimal |
plus(MathContext mc) |
BigDecimal |
pow(int n) |
BigDecimal |
pow(int n, MathContext mc) |
int |
precision() |
BigDecimal |
remainder(BigDecimal divisor) |
BigDecimal |
remainder(BigDecimal divisor, MathContext mc) |
BigDecimal |
round(MathContext mc) |
int |
scale() |
BigDecimal |
scaleByPowerOfTen(int n) |
BigDecimal |
setScale(int newScale) |
BigDecimal |
setScale(int newScale, int roundingMode) |
BigDecimal |
setScale(int newScale, RoundingMode roundingMode) |
short |
shortValueExact() |
int |
signum() |
BigDecimal |
stripTrailingZeros() |
BigDecimal |
subtract(BigDecimal subtrahend) |
BigDecimal |
subtract(BigDecimal subtrahend, MathContext mc) |
BigInteger |
toBigInteger() |
BigInteger |
toBigIntegerExact() |
String |
toEngineeringString() |
String |
toPlainString() |
String |
toString() |
BigDecimal |
ulp() |
BigInteger |
unscaledValue() |
static BigDecimal |
valueOf(double val) |
static BigDecimal |
valueOf(long val) |
static BigDecimal |
valueOf(long unscaledVal, int scale) |
String
java.lang
类 String
java.lang.Object
java.lang.String
所有已实现的接口:
Serializable, CharSequence, Comparable<String>
public final class String
extends Object
implements Serializable, Comparable<String>, CharSequence
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:
String str = "abc";
等效于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
下面给出了一些如何使用字符串的更多示例:
System.out.println("abc");
String cde = "cde";
System.out.println("abc" + cde);
String c = "abc".substring(2,3);
String d = cde.substring(1, 2);
字段摘要 |
|
static Comparator<String> |
CASE_INSENSITIVE_ORDER |
构造方法摘要 |
|
String() |
|
String(byte[] bytes) |
|
String(byte[] bytes, Charset charset) |
|
String(byte[] ascii, int hibyte) |
|
String(byte[] bytes, int offset, int length) |
|
String(byte[] bytes, int offset, int length, Charset charset) |
|
String(byte[] ascii, int hibyte, int offset, int count) |
|
String(byte[] bytes, int offset, int length, String charsetName) |
|
String(byte[] bytes, String charsetName) |
|
String(char[] value) |
|
String(char[] value, int offset, int count) |
|
String(int[] codePoints, int offset, int count) |
|
String(String original) |
|
String(StringBuffer buffer) |
|
String(StringBuilder builder) |
方法摘要 |
|
char |
charAt(int index) |
int |
codePointAt(int index) |
int |
codePointBefore(int index) |
int |
codePointCount(int beginIndex, int endIndex) |
int |
compareTo(String anotherString) |
int |
compareToIgnoreCase(String str) |
String |
concat(String str) |
boolean |
contains(CharSequence s) |
boolean |
contentEquals(CharSequence cs) |
boolean |
contentEquals(StringBuffer sb) |
static String |
copyValueOf(char[] data) |
static String |
copyValueOf(char[] data, int offset, int count) |
boolean |
endsWith(String suffix) |
boolean |
equals(Object anObject) |
boolean |
equalsIgnoreCase(String anotherString) |
static String |
format(Locale l, String format, Object... args) |
static String |
format(String format, Object... args) |
byte[] |
getBytes() |
byte[] |
getBytes(Charset charset) |
void |
getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) |
byte[] |
getBytes(String charsetName) |
void |
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) |
int |
hashCode() |
int |
indexOf(int ch) |
int |
indexOf(int ch, int fromIndex) |
int |
indexOf(String str) |
int |
indexOf(String str, int fromIndex) |
String |
intern() |
boolean |
isEmpty() |
int |
lastIndexOf(int ch) |
int |
lastIndexOf(int ch, int fromIndex) |
int |
lastIndexOf(String str) |
int |
lastIndexOf(String str, int fromIndex) |
int |
length() |
boolean |
matches(String regex) |
int |
offsetByCodePoints(int index, int codePointOffset) |
boolean |
regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) |
boolean |
regionMatches(int toffset, String other, int ooffset, int len) |
String |
replace(char oldChar, char newChar) |
String |
replace(CharSequence target, CharSequence replacement) |
String |
replaceAll(String regex, String replacement) |
String |
replaceFirst(String regex, String replacement) |
String[] |
split(String regex) |
String[] |
split(String regex, int limit) |
boolean |
startsWith(String prefix) |
boolean |
startsWith(String prefix, int toffset) |
CharSequence |
subSequence(int beginIndex, int endIndex) |
String |
substring(int beginIndex) |
String |
substring(int beginIndex, int endIndex) |
char[] |
toCharArray() |
String |
toLowerCase() |
String |
toLowerCase(Locale locale) |
String |
toString() |
String |
toUpperCase() |
String |
toUpperCase(Locale locale) |
String |
trim() |
static String |
valueOf(boolean b) |
static String |
valueOf(char c) |
static String |
valueOf(char[] data) |
static String |
valueOf(char[] data, int offset, int count) |
static String |
valueOf(double d) |
static String |
valueOf(float f) |
static String |
valueOf(int i) |
static String |
valueOf(long l) |
static String |
valueOf(Object obj) |