ACM JAVA 基础
感谢各位大牛的JAVA总结博客,我根据个人“喜好”,在省赛前夕,对此进行“搜索”总结。
一、代码格式基础
类名默认为Main。
class Main{
voidsolve(){}
voiddfs(){}
publicstatic void main(String[] args){
Main a=new Main();
a.solve();
}
}
二、编码基础
输入:
声明一个输入对象cin;Scanner cin=newScanner(System.in);
输入一个int值:Int a=cin.nextInt();
输入一个大数:BigDecimala=cin.nextBigDecimal();
EOF结束:while(cin.hasNext()){。。。}
读一个整数: int n =cin.nextInt(); 相当于 scanf("%d", &n); 或 cin >> n;
读一个字符串:String s =cin.next(); 相当于 scanf("%s", s); 或 cin >> s;
读一个浮点数:double t =cin.nextDouble(); 相当于 scanf("%lf", &t); 或 cin >> t;
读一整行: String s = cin.nextLine(); 相当于 gets(s); 或 cin.getline(...);
判断是否有下一个输入可以用cin.hasNext() 或 cin.hasNextInt() 或 cin.hasNextDouble() 等
输出:
输出str【任意类型】:System.out.println(str);【有换行】System.out.print(str);【无换行】
System.out.println(”str“);【输出字符串str】
三、大整数基础
赋值:BigInteger a=new BigInteger(String.valueOf(12));
大数类特殊函数:
判断相等:c.compareTo(BigDecimal.ZERO)==0【c等于】
判断大于:c.compareTo(BigDecimal.ZERO)>0 【c大于0】
判断小于:c.compareTo(BigDecimal.ZERO)<0 【c小于0】
修改格式:c.stripTrailingZeros().toPlainString();【c去除末尾0,并转换乘字符串】
BigInteger的函数:
构造:public BigInteger(Stringstr)【把string类型数据转变为大整数】
构造:public BigIntegerpow(BigDecimal b)【b次方】
加:public BigIntegeradd(BigInteger b)【加上b】
减:public BigIntegersubtract(BigInteger b)【减去b】
乘:public BigInteger multiply(BigInteger b)【乘b】
除:public BigIntegerdivided(BigInteger b)【除b】
最大值:public BigIntegermax(BigInteger a)【返回最大值】
最小值:public BigIntegermin(BigInteger a)【返回最小值】
除:public BigInteger []dividedandRemainder(BigInteger b)【除b,数组第一位是商,第二位是余数】
四、高精度小数基础
BigDecimal的函数:
构造:public BigDecimal(Stringstr)【把string类型数据转变为高精度数】
public BigDecimal(int str)【把int 类型数据转变为大整数】
public BigDecimal(double str)【把double类型数据转变为大整数】
次方:public BigDecimal pow(BigDecimal b)【b次方】
加:public BigDecimaladd(BigDecimal b)【加上b】
减:public BigDecimalsubtract(BigDecimal b)【减去b】
乘:public BigDecimalmultiply(BigDecimal b)【乘b】
除:public BigIntegerdivided(BigInteger b)【除b】
去前导0:n.stripTrailingZeros();
去后导0:n.
五. 字符串
字符串函数:
str.startWith("0").【以0开始】str.endWith("0")【以0结束】
String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始:
String a = "Hello"; // a.charAt(1) = 'e'
用substring方法可得到子串,如上例
System.out.println(a.substring(0, 4)) // output"Hell"
注意第2个参数位置上的字符不包括进来。这样做使得s.substring(a, b) 总是有 b-a个字符。
字符串连接可以直接用 + 号,如
String a = "Hello";
String b = "world";
System.out.println(a + ", " + b + "!"); // output "Hello, world!"
如想直接将字符串中的某字节改变,可以使用另外的StringBuffer类。
六、注意事项
(1)浮点数输出精确位控制
DecimalFormat g = new DecimalFormat("0.00");
double a = 123.45678;
System.out.println(g.format(a)); // 输出 123.46
还可用System.out.printf(“%.2f”,a);
(2) Java 里的数组有些变动,多维数组的内部其实都是指针,所以Java不支持fill多维数组。
数组定义后必须初始化,如 int[] a = newint[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()