沈阳做微网站的公司,长沙网站排名方案,天津网站营销seo电话,高质量的常州网站建设Chapter I. Java的优缺点各种书上都有#xff0c;这里只说说用Java做ACM-ICPC的特点#xff1a; (1) 最明显的好处是#xff0c;学会Java#xff0c;可以参加Java Challenge :) (2) 对于熟悉C/C的程序员来说#xff0c;Java 并不难学#xff0c;找本书#xff0c;一两…Chapter I. Java的优缺点各种书上都有这里只说说用Java做ACM-ICPC的特点 (1) 最明显的好处是学会Java可以参加Java Challenge :) (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~ Chapter II. 下面说一下ACM-ICPC队员初用Java编程所遇到的一些问题 1. 基本输入输出 (1) JDK 1.5.0 新增的Scanner类为输入提供了良好的基础简直就是为ACM-ICPC而设的。 一般用法为 import java.io.*
import java.util.* public class Main
{ public static void main(String args[]) { Scanner cin new Scanner(new BufferedInputStream(System.in)); } 当然也可以直接 Scanner cin new Scanner(System.in); 只是加Buffer可能会快一些 (2) 读一个整数 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() 等具体见 TOJ 1001 例程。 (3) 输出一般可以直接用 System.out.print() 和 System.out.println()前者不输出换行而后者输出。 比如同一行输出多个整数可以用 也可重新定义 static PrintWriter cout new PrintWriter(new BufferedOutputStream(System.out)); (4) 对于输出浮点数保留几位小数的问题可以使用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));
System.out.println(f.format(b)); 这里0指一位数字#指除0以外的数字。 2. 大数字 BigInteger 和 BigDecimal 是在java.math包中已有的类前者表示整数后者表示浮点数 用法 不能直接用符号如、-来使用大数字例如 (import java.math.*) // 需要引入 java.math 包 BigInteger a BigInteger.valueOf(100);
BigInteger b BigInteger.valueOf(50);
BigInteger c a.add(b) //
主要有以下方法可以使用
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开始 String a Hello; //用substring方法可得到子串如上例 System.out.println(a.substring(0, 4)) //注意第2个参数位置上的字符不包括进来。这样做使得 s.substring(a, b) 总是有 b-a个字符。 字符串连接可以直接用 号如 String a Hello;
String b world;
System.out.println(a , b !); //如想直接将字符串中的某字节改变可以使用另外的StringBuffer类。 4. 调用递归或其他动态方法 在主类中 main 方法必须是 public static void 的在 main 中调用非static类时会有警告信息 可以先建立对象然后通过对象调用方法 public class Main
{ void dfs(int a) { if () return; dfs(a1); } public static void main(String args[]) { Main e new Main(); e.dfs(0); }
} 5. 其他注意的事项 (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()