ACM之java速成.docx
- 文档编号:29753753
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:16
- 大小:23.33KB
ACM之java速成.docx
《ACM之java速成.docx》由会员分享,可在线阅读,更多相关《ACM之java速成.docx(16页珍藏版)》请在冰豆网上搜索。
ACM之java速成
ACM之java速成
2009年03月01日星期日10:
11 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目。
1.输入:
格式为:
Scannercin=newScanner(newBufferedInputStream(System.in));
例程:
importjava.io.*;
importjava.math.*;
importjava.util.*;
importjava.text.*;
publicclassMain{
publicstaticvoidmain(String[]args) {
Scannercin=newScanner(newBufferedInputStream(System.in));
inta;doubleb;BigIntegerc;Stringst;
a=cin.nextInt();b=cin.nextDouble();c=cin.nextBigInteger();d=cin.nextLine();//每种类型都有相应的输入函数.
}
}
2.输出
函数:
System.out.print();System.out.println();System.out.printf();
System.out.print();//cout<<…;
System.out.println();//cout<<…< System.out.printf();//与C中的printf用法类似. 例程: importjava.io.*; importjava.math.*; importjava.util.*; importjava.text.*; publicclassMain{ publicstaticvoidmain(String[]args) { Scannercin=newScanner(newBufferedInputStream(System.in)); inta;doubleb; a=12345;b=1.234567; System.out.println(a+""+b); System.out.printf("%d%10.5f\n",a,b);//输入b为字宽为10,右对齐,保留小数点后5位,四舍五入. } } 规格化的输出: 函数: //这里0指一位数字,#指除0以外的数字(如果是0,则不显示),四舍五入. DecimalFormatfd=newDecimalFormat("#.00#"); DecimalFormatgd=newDecimalFormat("0.000"); System.out.println("x="+fd.format(x)); System.out.println("x="+gd.format(x)); 3.字符串处理 java中字符串String是不可以修改的,要修改只能转换为字符数组. 例程: importjava.io.*; importjava.math.*; importjava.util.*; importjava.text.*; publicclassMain{ publicstaticvoidmain(String[]args) { inti; Scannercin=newScanner(newBufferedInputStream(System.in)); Stringst="abcdefg"; System.out.println(st.charAt(0));//st.charAt(i)就相当于st. char[]ch; ch=st.toCharArray();//字符串转换为字符数组. for(i=0;i System.out.println(ch);//输入为“bcdefgh”. if(st.startsWith("a"))//如果字符串以'0'开头. { st=st.substring (1);//则从第1位开始copy(开头为第0位). } } } 4.高精度 BigInteger和BigDecimal可以说是acmer选择java的首要原因。 函数: add,subtract,divide,mod,compareTo等,其中加减乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之间的运算,所以需要把int(double)类型转换为BigInteger(BigDecimal),用函数BigInteger.valueOf(). 例程: importjava.io.*; importjava.math.*; importjava.util.*; importjava.text.*; publicclassMain { publicstaticvoidmain(String[]args) { Scannercin=newScanner(newBufferedInputStream(System.in)); inta=123,b=456,c=7890; BigIntegerx,y,z,ans; x=BigInteger.valueOf(a);y=BigInteger.valueOf(b);z=BigInteger.valueOf(c); ans=x.add(y);System.out.println(ans); ans=z.divide(y);System.out.println(ans); ans=x.mod(z);System.out.println(ans); if(pareTo(x)==0)System.out.println("1"); } } 5.进制转换 java很强大的一个功能。 函数: Stringst=Integer.toString(num,base);//把num当做10进制的数转成base进制的st(base<=35). intnum=Integer.parseInt(st,base);//把st当做base进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制). BigInterm=newBigInteger(st,base);//st是字符串,base是st的进制. 6.排序 函数: Arrays.sort();至于怎么排序结构体,像C++里写个cmp的方法,在java还不太清楚,希望有人指点下~~ 例程: importjava.io.*; importjava.math.*; importjava.util.*; importjava.text.*; publicclassMain{ publicstaticvoidmain(String[]args) { Scannercin=newScanner(newBufferedInputStream(System.in)); intn=cin.nextInt(); inta[]=newint[n]; for(inti=0;i Arrays.sort(a); for(inti=0;i } }Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1)最明显的好处是,学会Java,可以参加JavaChallenge : ) (2)对于熟悉C/C++的程序员来说,Java并不难学,找本书,一两周业余时间就可以搞定了。 当然,这里只是指一般编程,想熟悉所有的Java库还是需要些时间的。 事实上,Java只相当于C++的一个改进版,所有的语法都几乎是C++的,很少有变动。 (3)在一般比赛中,Java程序会有额外的时间和空间,而实际上经过实验,在执行计算密集任务的时候Java并不比C/C++慢多少,只是IO操作较慢而已。 (4)Java简单而功能强大,有些东西用Java实现起来更为方便,比如高精度。 (5)用Java不易犯细微的错误,比如C/C++中的指针,“if(n=m)...”等 (6)目前来看Eclipse已成基本配置,写Java程序反而比C/C++更方便调试。 在具体竞赛时也算多一种选择。 (7)学会Java对以后工作有好处。 现在国外很多地方会Java的人比会C/C++的人多。 (8)会Java可以使你看起来更像偶蹄类动物(牛) hoho~ ChapterII. 下面说一下ACM-ICPC队员初用Java编程所遇到的一些问题: 1.基本输入输出: (1) JDK1.5.0新增的Scanner类为输入提供了良好的基础,简直就是为ACM-ICPC而设的。 一般用法为: Code import java.io.* import java.util.* public class Main { public static void main(String args[]) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); } import java.io.* import java.util.* public class Main { public static void main(String args[]) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); } 当然也可以直接Scannercin=newScanner(System.in); 只是加Buffer可能会快一些 (2) 读一个整数: intn=cin.nextInt(); 相当于 scanf("%d",&n); 或cin>>n; 读一个字符串: Strings=cin.next(); 相当于 scanf("%s",s); 或cin>>s; 读一个浮点数: doublet=cin.nextDouble(); 相当于 scanf("%lf",&t);或cin>>t; 读一整行: Strings=cin.nextLine(); 相当于 gets(s); 或cin.getline(...); 判断是否有下一个输入可以用cin.hasNext()或cin.hasNextInt()或cin.hasNextDouble()等,具体见TOJ1001例程。 (3) 输出一般可以直接用System.out.print()和System.out.println(),前者不输出换行,而后者输出。 比如: Code 同一行输出多个整数可以用 Code 也可重新定义: Code static PrintWriter cout = new PrintWriter(new BufferedOutputStream(System.out)); static PrintWriter cout = new PrintWriter(new BufferedOutputStream(System.out)); (4) 对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类, Code 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)); System.out.println(f.format(b)); 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)); System.out.println(f.format(b)); 这里0指一位数字,#指除0以外的数字。 2.大数字 BigInteger和BigDecimal是在java.math包中已有的类,前者表示整数,后者表示浮点数 用法: 不能直接用符号如+、-来使用大数字,例如: Code (import java.math.*) // 需要引入 java.math 包 BigInteger a = BigInteger.valueOf(100); BigInteger b = BigInteger.valueOf(50); BigInteger c = a.add(b) // (import java.math.*) // 需要引入 java.math 包 BigInteger a = BigInteger.valueOf(100); BigInteger b = BigInteger.valueOf(50); BigInteger c = a.add(b) // 主要有以下方法可以使用: Code BigInteger add(BigInteger other) BigInteger subtract(BigInteger other) BigInteger multiply(BigInteger other) BigInteger divide(BigInteger other) BigInteger mod(BigInteger other) int compareTo(BigInteger other) static BigInteger valueOf(long x) BigInteger add(BigInteger other) BigInteger subtract(BigInteger other) BigInteger multiply(BigInteger other) BigInteger divide(BigInteger other) BigInteger mod(BigInteger other) int compareTo(BigInteger other) static BigInteger valueOf(long x) 输出大数字时直接使用System.out.println(a)即可。 3.字符串 String类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始: Code String a = "Hello"; // String a = "Hello"; // 用substring方法可得到子串,如上例 Code System.out.println(a.substring(0, 4)) // System.out.println(a.substring(0, 4)) // 注意第2个参数位置上的字符不包括进来。 这样做使得s.substring(a,b)总是有b-a个字符。 字符串连接可以直接用+号,如 Code String a = "Hello"; String b = "world"; System.out.println(a + ", " + b + "! "); // String a = "Hello"; String b = "world"; System.out.println(a + ", " + b + "! "); // 如想直接将字符串中的某字节改变,可以使用另外的StringBuffer类。 4.调用递归(或其他动态方法) 在主类中main方法必须是publicstaticvoid的,在main中调用非static类时会有警告信息, 可以先建立对象,然后通过对象调用方法: Code public class Main { void dfs(int a) { if ( ) return; dfs(a+1); } public static void main(String args[]) { Main e = new Main(); e.dfs(0); } } public class Main { void dfs(int a) { if ( ) return; dfs(a+1); } public static void main(String args[]) { Main e = new Main(); e.dfs(0); } } 5.其他注意的事项 (1)Java是面向对象的语言,思考方法需要变换一下,里面的函数统称为方法,不要搞错。 (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: Code Arrays.fill() Arrays.sort() Arrays.fill() Arrays.sort() 本篇文章是对java字符串与格式化输出进行了详细的分析介绍,需要的朋友参考下 - 1、String类、StringBuilder类、StringBuffer类 String对象是不可变的,重载了运算符+,于是Strings="a"+2+"b"+2.2;这条语句就创建了4个String对象对象,把最后创建的对象引用赋给s。 但是String类定义了许多常用的对字符串进行操作的方法: 取字符串长度length、判断是否为空串isEmpty、返回字符数组或字节数组toCharArray()、取得指定索引的字符charAt()、字符串比较equals()compareTo()、字符转换成大写或小写toLowerCase()、以什么字符开头或者结尾startWith()、判断是否包含某个字符contains()、索引字符串indexOf()、获取子串substring()、字符串连接concat()、字符串代替replace()、去掉字符两端空格trim()、返回表示参数内容的字符串对象valueOf()、分割字符串返回字符串数组split()。 注意分割时传入的是正则表达式。 String类并没有提供字符串翻转的功能。 String对象是不可变的,所以常常用StringBuilder类来构造字符串。 StringBuilder类提供了字符串连接、删除单个字符、删除指定字符序列、插入字符等功能。 如果要保证线程安全,则应该用StringBuffer类,方法同StringBuilder。 2、格式化输出 以下示例了java中格式化输出到控制台和文件中 复制代码代码如下: 16px">packagedemo.others; importjava.io.FileNotFoundException; importjava.io.PrintStream; importjava.util.Formatter; /** *Formatter类用于格式化 * *@authorTouch * */ publicclassFormatterDemo{ publicstaticvoidmain(String[]args){ inti=1; doubled=2.2352353456345; //1.两种最简单的格式化输出,类似c语言中的printf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM java 速成
![提示](https://static.bdocx.com/images/bang_tan.gif)