先说一下Java对于ACM的一些优点吧:

(1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了。Java的语法和C++非常类似,可以说是C++的升级版,只是更加强调面向对象思想而已。(个人见解。。。)

(2) 在一般比赛中,Java程序会有额外的时间和空间,但真正进行大规模运算时Java并不比C/C++慢,输入输出效率比较低而已

(3) Java 代码简单且功能强大,有些像高精度之类的算法用Java实现起来更为简洁方便(ACM真正比赛时是讲究做题速度的,任何题只要能过就行,而不必过于要求程序的速度有多高,不超时就好)。

*小技巧:某些题目用Java超时的话可以用Java打表然后用C/C++提交

(4) 用Java不易犯细微的错误,比如C/C++中的指针, “if (n = m) … ” 等。

(5) 目前Eclipse已成基本配置,写Java程序反而比C/C++更方便调试。在具体竞赛时也算多一种选择。

关于ACM中应用的一些问题:

(1) JDK 1.5.0 及其以上版本提供的Scanner类为输入提供了良好的基础,很好地优化Java的输入问题。

代码如下:

  1. import java.io.* import java.util.*
  2. public class Main {
  3. public static void main(String args[])
  4. {
  5. Scanner cin = new Scanner(new BufferedInputStream(System.in));
  6. }
  7. }

也可以直接 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()

(3) 输出一般可以直接用 System.out.print() 和 System.out.println(),前者不输出换行,而后者输出。

  1. System.out.println(n); // n 为 int 型 同一行输出多个整数可以用
  2. System.out.println(new Integer(n).toString() + " " + new Integer(m).toString());
  3. //也可重新定义:
  4. static PrintWriter cout = new PrintWriter(new BufferedOutputStream(System.out));
  5. cout.println(n);

(4)对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类,

  1. import java.text.*;
  2. DecimalFormat f = new DecimalFormat("#.00#");
  3. DecimalFormat g = new DecimalFormat("0.000");
  4. double a = 123.45678, b = 0.12;
  5. System.out.println(f.format(a));
  6. System.out.println(f.format(b));
  7. System.out.println(g.format(b));

大数:

BigInteger 和 BigDecimal 是在java.math包中已有的类,前者表示整数,后者表示浮点数

  1. import java.math.* // 需要引入 java.math 包
  2. BigInteger a = BigInteger.valueOf(100);
  3. BigInteger b = BigInteger.valueOf(50);
  4. BigInteger c = a.add(b) // c = a + b;
  5. //主要有以下方法可以使用:
  6. BigInteger add(BigInteger other)
  7. BigInteger subtract(BigInteger other)
  8. BigInteger multiply(BigInteger other)
  9. BigInteger divide(BigInteger other)
  10. BigInteger mod(BigInteger other)
  11. int compareTo(BigInteger other)
  12. static BigInteger valueOf(long x)
  13. //输出数字时直接使用 System.out.println(a) 即可

字符串:

String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始:

  1. String a = "Hello"; // a.charAt(1) = 'e'

用substring方法可得到子串,如上例

  1. System.out.println(a.substring(0, 4)) // output "Hell"

注意第2个参数位置上的字符不包括进来。这样做使得 s.substring(a, b) 总是有 b-a个字符。

字符串连接可以直接用 + 号,如

  1. String a = "Hello";
  2. String b = "world";
  3. System.out.println(a + ", " + b + "!"); // output "Hello, world!"

如想直接将字符串中的某字节改变,可以使用另外的StringBuffer类。

调用递归(或其他动态方法)

在主类中 main 方法必须是 public static void 的,在 main 中调用非static类时会有警告信息,

可以先建立对象,然后通过对象调用方法:

  1. public class Main {
  2. void dfs(int a)
  3. {
  4. if () return;
  5. dfs(a+1);
  6. }
  7. public static void main(String args[])
  8. {
  9. Main e = new Main();
  10. e.dfs(0);
  11. }
  12. }

其他注意的事项:

(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:

  1. Arrays.fill()
  2. Arrays.sort()
  3. Arrays.binarySearch()

虽然Java功能很强大,但不能完全依赖他,毕竟C和C++还是ACM/ICPC的主流语言,适当地使用才能有效提高比赛中的成绩。。。

附:

例题:HDOJ 1002

  1. import java.math.BigDecimal;
  2. import java.util.Scanner;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int n = sc.nextInt();
  7. int t=1;
  8. while(n-->0){
  9. if(t==1){
  10. }else{
  11. System.out.println();
  12. }
  13. BigDecimal a = sc.nextBigDecimal();
  14. BigDecimal b = sc.nextBigDecimal();
  15. BigDecimal c = a.add(b);
  16. System.out.println("Case "+t+":");
  17. System.out.println(a+" + "+b+" = "+c);
  18. t++;
  19. }
  20. }
  21. }

ACM中Java的应用的更多相关文章

  1. ACM中java的使用

    ACM中java的使用 转载自http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输 ...

  2. ACM中java的使用 (转)

    ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...

  3. ACM 中JAVA的应用

    原文地址:http://www.cppblog.com/vontroy/archive/2010/05/24/116233.html 先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C+ ...

  4. ACM中java中BigInteger和Decimal用到的主要函数

    java中大数以及高精度常用函数 使用java大数类解决问题时我们需要注意两个方面:1.不能有包名,也就是说我们要把主类放到默认的包里,如果你的代码里出现形如package cn.gov.test;这 ...

  5. ACM中Java使用注意事项

    1. String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始, 而不是像C/C++那样使用 []访问是每个字符. 2. 在主类中 main 方法必须是 public s ...

  6. ACM中Java高效输入输出封装

    来自互联网 : 既高效又好用才是王道! import java.io.IOException; import java.io.FileInputStream; import java.io.Input ...

  7. [原创]浅谈JAVA在ACM中的应用

    由于java里面有一些东西比c/c++方便(尤其是大数据高精度问题,备受广大ACMer欢迎),所以就可以灵活运用这三种来实现编程,下面是我自己在各种大牛那里总结了一些,同时加上自己平时遇到的一些jav ...

  8. ACM之Java速成(4)

    ACM中Java.进制转换 Java进制转换: 由于Unicode兼容ASCII(0-255),因此,上面得到的Unicode就是ASCII. java中进行二进制,八进制,十六进制,十进制间进行相互 ...

  9. ACM之Java速成(3)

    ACM中Java.大数处理 先上个代码: import java.math.*; import java.util.*; class Main{ public static void main(Str ...

随机推荐

  1. 从零开始学习jQuery-------jQuery元素选择器(三)

    下面我们来介绍一下jQuery元素选择器,在Web开发中我们最常用的操作是获取元素,然后对获取的元素进行一系列的操作,jQuery根据获取页面元素的不同,可以将jQuery选择器分为四大类:基本选择器 ...

  2. Activity的任务栈Task以及启动模式与Intent的Flag详解

    什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...

  3. Core Python Notes

    开发需要在读 Python 核心编程,一些 Point 记录如下. ******************************************** 版本相关 标准版的 Python 是用 C ...

  4. CSS before和after伪元素

    CSS中有一个特性允许我们添加额外元素而不扰乱文档本身,它们是以CSS选择器的形式出现的,具有标签的表现效果,但是呢又不是真正的标签元素,所以叫做“伪元素”.下面就说一下常见的两个伪元素before和 ...

  5. Effective java-泛型思维导图

  6. 千万数量级分页存储过程 +AspNetPager现实分页

    存储过程 USE [ForeignTradeDB] GO /****** Object: StoredProcedure [dbo].[CommonGetDataPager] Script Date: ...

  7. datazen logo修改

    第一步:进入cp 页面 第二步: P161说明文档的P161开始,这里有说有版本的图片命名 第三步:再次强调第二步的命名,否则 如果你直接复制这个名字,不但效果出不来,还删除不掉这个包,我上次是把da ...

  8. MySQL无法登录服务器解决方法

    提示:#2000 无法登录 MySQL 服务器 今天用本机装了个phpMyAdmin,版本3.4.8,想用它来连一台内网服务器上的Mysql,于是乎修改phpMyAdmin配置文件config.inc ...

  9. HTTP简单理解

    自己最近正在看 <Java Web 整合开发实战>这本书, 看到HTTP协议,感觉写的挺明白了,就把书中内容总结了下,记录在此. 超文本传输协议(HyperText Transfer Pr ...

  10. jquery动画总结

    基本动画 show() //直接显示元素,没有动画 show(speed, [callback]) //有动画,有回调函数 hide() //直接隐藏元素,没有动画 hide(speed, [call ...