ACM中使用JAVA的介紹

來源:互聯網
上載者:User

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++的人多。
(  會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(),前者不輸出換行,而後者輸出。
比如:
       system.out.println(n);   // n 為 int 型
       同一行輸出多個整數可以用
        system.out.println(new Integer(n).toString() + " " + new Integer(m).toString());
       也可重新定義:

        static PrintWriter cout = new PrintWriter(new BufferedOutputStream(System.out));    

        cout.println(n);

(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));
system.out.println(g.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)   // c = a + 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";    // 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類。
4. 調用遞迴(或其他動態方法)

在主類中 main 方法必須是 public static void 的,在 main 中調用非static類時會有警告資訊,
可以先建立對象,然後通過對象調用方法:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.