2-1.1 顯示運算結果

2011年8月8日 星期一

| | |
2-1.1 顯示運算結果
    現在讓我們撰寫程式, 進行簡單的加法運算, 並顯示運算後的結果。

Chap2_1_1.java
 // 計算並顯示整數63與37的和
class Chap2_1_1 {

public static void main(String[] args) {
System.out.println(63 + 37);
}
}

執行結果
100


程式說明:
       從輸出結果來看,可以歸納出以下要點:
       1.因為63+37位於小括號內,所以會先進行兩個整數的加法運算,即63+37=100。
       2. 因此,System.out.println(63 + 37); 就等同於System.out.println(100); 。所以,程式會
          在螢 幕上顯示整數值100後,再輸出換行字元。
        
    [補充] System.out.print(); 及 System.out.println(); 敘述中的print()和println()方法,這是方法
              多載(method overloading)的應用,在第七章會更進一步地探討。
 
整數與字串
      上例中,數值63和37就是整數常值(integer literal)。請注意,這和字串常值(String literal)"63"不同。不過,就此程式的執行結果來看,若只顯示數值100的話,無法瞭解該程式所要表達的意義。所以,我們可以搭配字串常值的使用,來表達更清楚的意思。

連結字串與數值
       因此,為了清楚表達整數值100是數值63加上數值37的結果,我們修改上述程式,加入適當的字串顯示後,可以清楚表達所進行的運算。

Chap2_1_2.java
// 計算並顯示整數63與37的和,利用加入適當的字串常數,讓表達的意思更加清楚。
class Chap2_1_2 {

public static void main(String[] args) {
System.out.println("63 + 37 =" + (63 + 37));
}
}


執行結果
63 + 37 =100



程式說明:
       由執行結果來看,在將結果輸出並顯示之前,會先完成多項動作,其處理過程如下:
      1.如同我們在做數學運算一般,括號內的運算會優先執行,也就是先進行(63+37)的加法運          算。

  [重要]  括號內的運算會優先執行。

      2. 因為,使用+號連接字串與數值時,會先將數值轉換成字串,接著再進行字串的連結。
         所以,數值100就會轉換成字串"100"。
 
  [重要] 當以”+”號連接字串與數值時,不論是字串+數值或是數值+字串,會先將數值
             轉換成字串後,再進行自串連結。

      3. 接著,就會連結字串“63+37=”和“100”,成為 “63+37=100”,然後將結果輸出並顯示。


System.out.println( “ 63 + 37 = ” + ( 63 + 37 ) );
                                                           ⤵ 進行括號()內的運算
             ⇩                                           100
        
 ⇢由左至右運算 ⇢                     
System.out.println( “ 63 + 37 = ” + 100 );
                                                       ⤵ 將 int 100 轉換成 String “100”
                                                      “100”
             ⇩ 連結

System.out.println(  “ 63 + 37 = 100 ” );

                                                        圖2-1

      想看看,如果刪除程式Chap2_1_2中圍住運算式63+37的括號,結果會有什麼不同?底下是修改後的程式,試著執行看看,並觀看結果有何不同。

Chap2_1_3.java
// 計算並顯示整數63與37的和,因為少了括號而得到非預期的結果。
class Chap2_1_3 {

public static void main(String[] args) {
System.out.println("63 + 37 = " + 63 + 37);
}
}

執行結果
63 + 37 = 6337


程式說明:
       因為運算式63+57沒有用括號圍住,所以程式會由左至右進行運算,得到63+57=6357這個結果,而不是我們所預期的63+57=100。以下,我們利用圖示來表達整個運算過程。

System.out.println( " 63 + 37 = " + 63 + 37 );
                                                       ⤵ int 63 轉換成 String “63”
                                                      “63”
                ⇩ 進行字串連結
System.out.println( " 63 + 37 = 63” + 37 );
                                                          ⤵ int 37 轉換成 String “37”
                                                         “37”
                ⇩ 進行字串連結
System.out.println( " 63 + 37 = 6337 “ );

                                                             圖2-2

        接著,我們再看看另一個不使用括號的範例。雖然,該範例會得到與我們預期相同的結果。但是,除非你非常清楚整個運算流程。否則,不建議以此方式來撰寫程式。

Chap2_1_4.java
// 計算並顯示整數63與37的和,雖然沒有括號,卻得到預期的結果。
class Chap2_1_4 {

public static void main(String[] args) {
System.out.println(63 + 37 + "是63加上37的和。");
}
}


執行結果
100是63加上37的和。


程式說明
       雖然,我們沒有使用括號來圍住運算式63+37。但是,仍然可以得到正確的結果。這是因為運算順序的關係。下圖,詳細解說整個運算流程。

⇢ 由左至右讀取 ⇢⇢⇢
System.out.println( 63 + 37 + " 是63加上37的和。" );
                                  ⤵ 進行 63 + 37 的運算
                                 100

                          ⇢ 讀取到 +“字串”  
System.out.println( 100 + " 是63加上37的和。");
                                   ⤵ int 100 轉換成 String “100”
                               “100”
             ⇩ 連結

System.out.println( “ 100 是63加上37的和。" );

                                                        圖2-3
      請注意,盡量多使用各種括號來決定運算的優先順序。畢竟,不是所有的運算都是由左到右進行運算。而且,省略各種括號,只會讓程式變得更加難懂,甚至得到非預期的結果。所以,要精簡程式碼之前,請先確定你已完全瞭解運算流程,以免因小失大。

挑戰題

//求出運算式 63 – 27的結果,且在畫面上顯示 63-37 = 26

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

System.out.println("63-37 = " + 63 - 37);

}
}

執行結果
D:\chap2\Err2_1_1.java:6: operator - cannot be applied to java.lang.String,int
System.out.println("63-37 = " + 63 - 37);
                                  ^
1 error


找出以上程式錯誤,並加以修正。

0 意見:

張貼留言