如何把 C 程式改為 Java Application? 
  (1) 最前面補上這些:  
     import java.io.*; 
     import ... 看有用到啥...
     class ggyy {     // 名稱要與檔案名伊樣 

  (2) 最後面補上這個, 這樣整個 C 程式被 class 包起來  
     } // class ends here 

  (3) 在 class 裡面寫這些:  (前後不重要, 習慣上放前面)  
     BufferedReader cin = null;
     PrintStream cout = null;
     PrintStream cerr = null;
     public static void main(String xxx[ ]) {
        ggyy me = new ggyy( );   // ggyy 是你的 class name
        me.prepareIO( );
        me.main( );   // call 原先 C/C++ 的 main( )
     }
     public ggyy( ) {   }   // 目前沒有事情做
     void prepareIO( ) {
        try{
           cin = new BufferedReader(new InputStreamReader(System.in));
        }catch(Exception e) {;}    // Exception handling
        cout = System.out;
        cerr = System.err;
     } // that's OK now
     void printf(String fmt, Object... yy) {
        cout.printf(fmt, yy);
     }

  (4) 若有寫 #include .. 通通殺掉
      因為 Java 不認帳!
  (5) 若有寫 #define xx yy
      或是 const int xx=yy;
      都改用 public static final int xx=yy;
      例如 #define MAX_STONE 31
      要改成:
      public static final int MAX_STONE = 31;
  (6) 關於指標, (a)若不是文字的指標就改成 array,
       (b)若是文字的指標阿就是字串就改為 String
          這時要善用 String 的 .charAt(?)
        例如 C 的 char *id;  或是 char id[99];
        常會搭配使用  if(id[k] == ...) ... 
       這 if(id[k] == ...)... 就改為 if(id.charAt(k) == ...) ...
       若要改變 id[k] 內容則不可用 String, 要改用 StringBuffer
       StringBuffer s = "haha how are you?";
       s.setCharAt(1, 'e'); s.setCharAt(3, 'e');  // ==> "hehe how are you?"
       System.out.println("s=" +s);    
     ** 注意 String s 的 內容不能改: s.charAt(2) = 'x'; // 錯錯錯
        StringBuffer ss 才能改: ss.setCharAt(2, 'x');  
  (7) 關於亂數
      C/C++ 的 inr rand( ) 在 Java 要用 Math.random()且不一樣
     阿就是 0 <= Math.random( ) < 1 是 double 實數 
     那就寫一支int rand() 就可:  
     int rand( ) {
        return (int) (32767* Math.random( ) );
     } // 這樣是 0..32766   
  或這樣  
     int rand( ) {
        return (int) ( Integer.MAX_VALUE * Math.random( ) );
     } // 這樣是 0..MAX_VALUE -1  
     // 注意 Java 的 int 是 32-bit, 等於 C/C++ 的 long int;
     // Java 的 long 是 64-bit,  Java 整數都是 sign integer
   // 還有 Java Math.random( ) 是自動換  SEED
   //  注意  C 的 rand( ) 若不手動換 SEED 則每次重新執行都相同
  (8) 程式中的 squeeze( ) 要怎辦?
     Java 的 String 有 replace 函數, Try this: 
     String aa = "  haha hehe how are you   ";
     String bb = aa.replace(" ", "");    
      bb = bb.replace("\t", "");    
     System.out.println("bb="+bb);   

  這樣大概就可以了! 包括你所有 printf 都 OK 了!
 剩下是輸入以及字串處理...
 ** Java 要讀一整列要這樣(C 的 gets 或 fgets): 
       String s = null;
       try {
          s = cin.readLine( );
       }catch(Exception e) {;}   
 ** Java 要讀一個 char 要這樣:  
       int c = 0;
       try {
          c = cin.read( );
       }catch(Exception e) {;}
       if(c == -1 ) // EOF encounted 檔案結束!   
 ** Java 要讀一整列上只有一個整數: 
       String stmp=null;
       int ans=0;
       try {
           stmp = cin.readLine( );
           ans = Integer.parseInt(stmp);  // Double.parseDouble(stmp);
       }catch(Exception e) {;}
       // ans is what you want
   
 ** 若程式內有用到 scanf 那就比較麻煩 :-(
    此時可以用 java.util.Scanner  一個一個讀入
    或是改為用 readLine() 讀入整列後用 StringTokenizer 處理

 ** 如何使用 java.util.Scanner?  
    java.util.Scanner gg = new java.util.Scanner(System.in);
    int n;
    double x;
    String haha;
    if(gg.hasNextInt( )) n = gg.nextInt( );
    if(gg.hasNextDouble( ) ) x = gg.nextDouble( );
    if(gg.hasNext( )) haha = gg.next( );   
    可寫 while Loop 抓到 hasNext( ) 不成立為止 !

 ** Java 的字串處理更簡單
    Java 的 String 是物件 (與 C++ class string 一樣 )
    C 的 int strcmp(char*, char*) ?  

    String s = "abcd235  78ha  ha  ";
    if(s.equals("hehehe") //... 字串是否相等 ?
    if(s.startsWith("haha")) //...
    s.substring(2,5)  是 "cd2"  表示 2-th 到 4-th  (5-1 = 4)
    s.replace(' ', '');  // 去掉所有的空白
    s.charAt(3)  是 'd'  因為從第0字算起
    if(s.charA(0) == 'q' )  // 開始是 q
    if(s.equalsIgnoreCase("quit"))  // 大小寫不管是否等於 "quit"

   Please see javap java.lang.String
   或用 Browser 看 java.sun.com 的 Java API References

You are the -th visitors to this page.
      回到作業目錄             回到課程目錄