2012年7月8日 星期日

JAVA學習心得-取得使用者輸入資料

有些java的學習書籍使用
import java.io.*;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine(); //取得輸入資料
int liter = Integer.parseInt(str); //將輸入資料轉換成整數

J2SE 5.0 之後,您可以使用java.util.Scanner取得使用者的輸入。(參考 http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/UserInput.htm)

直接先來看如何取得使用者的輸入字串:
  • HelloUser.java
import java.util.Scanner;

public class HelloUser {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Please input your name: ");
        System.out.printf("Hello! %s!", scanner.next());
    }
}

執行結果:
Please input your name: caterpillar
Hello! caterpillar!


解釋一下程式,java.util套件是J2SE 5.0的標準套件,編譯器會知道到哪去找這個套件,您使用"import"是在告訴編譯器,您將使用 java.util下的 Scanner類別。

"new"表示新增一個 Scanner物件,在新增一個 Scanner物件時需要一個System.in物件,因為實際上還是System.in在取得使用者的輸入,您可以將Scanner看作是 System.in物件的支援者,System.in取得使用者輸入之後,交給Scanner作一些處理(實際上,這是 Decorator 模式 的一個應用)。

簡單的說,您告訴執行環境新增一個Scanner物件,然後使用它的next()方法來取得使用者的輸入字串,如果要取得數字呢?您可以使用 Scanner物件的nextInt()方法,例如:


  • HelloUser.java
import java.util.Scanner;

public class HelloUser {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Please input a number: ");
        System.out.printf("Oh! I get %d!!", scanner.nextInt());
    }
}

nextInt()會將試著取得的字串轉換為int整數,看看執行結果:
Please input a number: 100
Oh! I get 100!!


同樣的,您還可以使用Scanner的nextFloat()、nextBoolean()等方法來取得使用者的輸入,並轉換為正確的 資料型態。

要注意的是,Scanner的next()取得輸入的依據是空白字元,舉凡按下空白鍵、tab鍵或是enter鍵,Scanner就會傳回下一個輸入,如果您想要取得包括空白字元的輸入,可以使用nextLine()方法,或是 使用 BufferedReader 類別取得輸入


下方是使用scanner方式輸入到一維陣列中


import java.util.*;
public class TestArray {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  String [] strInput = new String[3];

  System.out.println(strInput.length);
  //輸入資料
  for(int i=0;i<3; i++)
  {

   Scanner cin = new Scanner(System.in);
   //BufferdReader br = new BufferedReader(new InputStreamReader(System.in));
   strInput[i]= cin.nextLine().toString();
  }
  //輸出資料
  for(int i=0; i<3;i++)
  {
   System.out.println(strInput[i]);
  }


 }

}

沒有留言:

張貼留言