2-2.1 讀入整數

2011年8月19日 星期五

| | |

2-2 鍵盤輸入
       目前,我們已經會利用變數來改變數值,但都是在程式中做變更。本節將學習由鍵盤輸入數值,作為更改變數值的內容。換句話說,程式可以讓使用者動態地輸入數值,得到他們想要的結果,進而達到與使用者互動的目的。

2-2.1 讀入整數

     Chap2_2_1  範例程式讓使用者透過鍵盤輸入二個整數值,經過簡單的算術運算後,在畫面上顯示得到的結果。

Chap2_2_1.java
// 讀入由鍵盤輸入的二個整數,進行加、減、乘、除等運算後,將結果輸出至營幕

import java.util.Scanner;

class Chap2_2_1 {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("X和Y的簡單算術運算。");

System.out.print("請輸入整數X:");
int x = scanner.nextInt(); // 將讀入的整數值指定給變數x

System.out.print("請輸入整數Y:");
int y = scanner.nextInt(); // 將讀入的整數值指定給變數y

System.out.println("x + y = " + (x + y)); // 顯示x + y的值
System.out.println("x - y = " + (x - y));          // 顯示x - y的值
System.out.println("x * y = " + (x * y)); // 顯示x * y的值
System.out.println("x / y = " + (x / y));             // 顯示x / y的值(商數)
System.out.println("x % y = " + (x % y)); // 顯示x % y的值(餘數)
}
}

執行結果
X和Y的簡單算術運算。
請輸入整數X:5
請輸入整數Y:8
x + y = 13
x - y = -3
x * y = 40
x / y = 0
x % y = 5


程式說明:
1. 想要讀取從鍵盤輸入的數值,必須經過幾道程序,這些程序包含的觀念有些複雜   ,可以將其先視為"固定語法"並且記住,重要的步驟如圖2-11所示。
2. 接著,程式分別宣告變數x和變數y,接受從鍵盤輸入的整數值。然後,針對x和y進    行加、減、乘、除和取餘數的運算。最後,顯示運算的結果。

從鍵盤進行輸入的程式(必備的三步驟)
import java.util.Scanner; ------------------  ① 在宣告類別之前,也就是程式的一開頭。
class Chap2_2_1 {
public static void main(String[] args) {
   Scanner scanner = new Scanner(System.in); --------- ② 置於main方法的一開始   
                                     ,一定要在步驟3之前,製作一個叫scanner之Scanner型
                                      態的箱子。
          scanner.nextInt(); ---------- ③ 從scanner箱子中取得 int 數值。
  }
}

圖2-11
步驟 :
① 可以將 import 視為”檢查”,查尋檢查 Scanner類別檔是否存在。

② 可視為接收資訊的箱子,箱子名稱 scanner 為我們自行設定,也可變更為其它的名稱。

③ nextInt() 是Scanner.java中的一個方法。關於方法(method)的詳細內容會在第七章介紹。

[補充] 由鍵盤輸入的 int 型態數值範圍為 -2,147,483,648 ~ 2,147,483,647 。同時,不
可以輸入英文字母或是符號文字。
思考題:
// 由鍵盤輸入二個整數,並且將其加減乘除後的結果輸出

class Err2_2_1 {

  public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("X及Y 加減乘除運算。");

System.out.print("請輸入整數X:"); // 輸入x的值
int x = scanner.nextInt(); // 將整數給x

System.out.print("請輸入整數Y:"); // 輸入y的值
int y = scanner.nextInt(); // 將整數給y

System.out.println("x + y = " + (x + y)); // 顯示x + y的值
System.out.println("x - y = " + (x - y)); // 顯示x - y的值
System.out.println("x * y = " + (x * y)); // 顯示x * y的值
System.out.println("x / y = " + (x / y)); // 顯示x / y的值(商)
System.out.println("x % y = " + (x % y)); // 顯示x % y的值(餘數)
  }
}


錯誤訊息
D:\chap2\Err2_2_1.java:6: cannot find symbol
symbol  : class Scanner
location: class Err2_2_1
Scanner scanner = new Scanner(System.in);
^
D:\chap2\Err2_2_1.java:6: cannot find symbol
symbol  : class Scanner
location: class Err2_2_1
Scanner scanner = new Scanner(System.in);
                     ^
2 errors


為什麼一個錯誤會造成二個錯誤訊息?


思考題 :
執行 Chap2_2_1.class, 輸入 3.5
X及Y 加減乘除運算。
請輸入整數X:3.5


錯誤訊息
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Chap2_2_1.main(Chap2_2_1.java:12)


這是發生什麼事情?  這是一執行時期錯誤(run-time error)。

[補充] 錯誤訊息有二種,一種是之前常看見的,編譯錯誤(compile error)。另一種則是現在  
          所看見的執行錯誤(run-time error)。從字面上我們可以很容易的了解,一種是在編
          譯時即產生錯誤,這代表你沒有遵循 java 語法規範所照成的錯誤。

0 意見:

張貼留言