2-1.2 變數

2011年8月9日 星期二

| | |

2-1.2 變數
我們在前面所示範的一些程式,只能處理一些簡單的運算,像是求出63+37的和,或是數值與字串的連結。而且,在這些運算中,數值部分是固定的,也就是63或37。換句話說,如果要進行其它數值的運算,必須直接修改 System.out.println(63+37); 括號中的數值部分然後,在重新編譯後,才可以得到新的結果。這樣一來,不但費時也費力,也不是好的解決問題方式。所以,若是有一種東西可以讓我們自由地變更數值,而不必費心地修改每個數值,再重新編譯,得到結果,該是多美好的事情啊當然,這個東西就是我們接著要介紹的變數(variable)。
 
變數宣告
        到底,什麼是變數呢?若單從字面上來看,變數應該就是可以變動的數。這種說法,過於簡單與抽象,進一步來看,我們可以將變數視為存放東西各種箱子,而每種箱子只能存放符合規範的東西,這裡所指的規範,其實就是指資料型態(datatype),如圖2-4所示。我們東西放入箱子後,不但可以將該東西取出,也可以換成其他的東西,如此一來,就可以達到更改數值的目的。

圖2-4
        不過,這麼多存有東西的箱子,該如何取得我們所要的東西呢?答案就是為每個箱子命名。藉由給予每個箱子特定的名稱,就能取用到指定的箱子,以及箱子內所存放的東西。上述的整個過程,就是所謂的變數宣告(declaration)底下是個簡單的變數宣告
 
           Int x;   //宣告名稱為x的變數,且該變數的資料型態為int
 圖示如下
圖2-5

[重要] 每個變數在使用之前,必須先宣告並且給予名稱。
 
      當宣告完變數之後,就可以對該變數進行不同的處理。底下的範例,簡單地示範指定數值給變數,以及如何顯示該變數的數值。
 
Chap2_1_5
// 將數值指定給變數並輸出至畫面
class Chap2_1_5 {

public static void main(String[] args) {
             int x;                    //  x為int型態的變數            ---------------------

             x = 88;                         // 指定88給x               ---------------------

             System.out.println(x);                  // 顯示x的值  -------------------
}

 結果
88

 
 程式說明:
1. 這個程式先宣告一個資料型態為int的變數x,表示x只能用來存放整數(int)數值,
  不能存放其他的資料型態。
2. 接著,利用指定運算子(=)將數值88指定給x,如圖2-6
圖2-6
 
[重要] 指定運算子”=”是將數值指定給變數,這和數學運算=”號不同

3. 變數一旦放入內容後,可以對該變數進行各種運算。本例則是取出該變數的內
   容, 並將其顯示在螢幕上
        

挑戰題 :
Err2_1_2.java
// 印出變數 x 的值(5)

class Err2_1_2{

   public static void main(String[] args){
        int x = 5;
             
        System.out.println( "x" );    
}
}

x


問題 : 為什麼得不到 x 的值(5)呢?

       現在,我們已經會使用變數了。接著,我們將宣告兩個變數,並透個這兩個變數進行一些比較複雜的運算。 

Chap2_1_6
// 顯示x與y的和、積以及平均值
class Chap2_1_6 {

public static void main(String[] args) {
             int x;                    // x為int型態的變數
             int y;                    // y為int型態的變數

             x = 48;                         // 指定48給x
             y = 57;                         // 指定57給y

             System.out.println("x的值為" + x + "。");             // 顯示x的值
             System.out.println("y的值為" + y + "。");            // 顯示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) / 2 + "。"); // 顯示平均值
}

 結果
x的值為48。
y的值為57。
x+y的和為105。
x*y的積為2736。
x及y的平均值為52。

 
程式說明:
1. 程式先宣告兩個int變數xy宣告兩個變數的方式,除了上方式,也可以如此宣告:
 
int x,y ;

      就是利用”,”號來連結所要宣告的變數。這樣的方式,可以同時宣告多個變數,只需要在每個變數之間以”,”號隔開。事實上,這二種宣告方式沒有優劣之分,如果按照程式內一行一行的宣告,則比較容易加上註解,缺點就是程式的行數會增加。

2. 然後,分別將數值48指定給x,數值57指定給y。

3. 分別顯示x和y內容。然後,顯示x+y的結果,以及(x+y)/2的結果。

圖2-8
 
算術運算的方式及優先順
   從程式的結果可以得知,進行算術運算的規則和一般的數學計算很相似,像是括號內先運算,乘除運算優於加減運算等。
*

System.out.println("xy的平均值為" + (x + y) / 2 + "");
                                                                   
                                                           (48 + 57) /  2
                                                                      
                                                                     105 / 2

圖2-9
   另外,由於整數相除的結果也會是整數,所以(48+57)/2的結果是52,不是52.5。
[重要] 整數/整數的運算結果也是整數,即會捨棄小數部分。

挑戰題 :

Err2_1_3.java
// 顯示xy的和、積以及平均值

class Err2_1_3 {
   public static void main(String[] args){

int x; // xint型態的變數
int y; // yint型態的變數

x = 32.5;
y = 42.6;

System.out.println("x的值為" + x + "");         
System.out.println("y的值為" + y + "");     
   
System.out.println("x+y的和為" + (x + y) + "");     
System.out.println("x*y的積為" + (x * y) + "");           
System.out.println("xy的平均值為" + (x + y) / 2 + "");  

}
}

D:\chap2\Err2_1_3.java:9: possible loss of precision
found   : double
required: int
x = 32.5;
   ^
D:\docs\javabook\chap2\Err2_1_3.java:10: possible loss of precision
found   : double
required: int
y = 42.6;
   ^
2 errors


發生什麼事? 為什麼會產生錯誤?

0 意見:

張貼留言