隨筆 - 9  文章 - 21  trackbacks - 0
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類(9)

          隨筆檔案(9)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          第 1 天的問題

          下面的方法意圖確定它那唯一的參數是否是一個奇數。這個方法能夠正確運轉嗎?

              public static boolean odd(int number) {
                  return number % 2 == 1;
              }
          
          

          第 1 天問題的解答

          有1/4的情況下,答案是錯誤的。比如:odd(-3) 表達式得到的結果就是 fasle。對于所有的負奇數,上面的方法都會得到錯誤的結果。

          原因

          問題的原因在于求余操作符(%),在Java中該操作符被定義為

          對于所有的 int 數值 a 和所有的非零 int 數值 b,都滿足下面的恒等式
          (a / b) * b + (a % b) == a

          換句話說,(a % b) = a - (a / b) * b

          由數學推理運算可知,a % b 的符號有操作數a決定(要么為0,要么和a一致)。也就是說, -5 % 3 => -2, -5 % -3 => -2。

          因此,對于所有的負奇數n, n % 2 => -1。問題中的方法自然有問題啦。

          解決辦法

          要判斷一個整數是否為奇數的解決辦法有兩種。

              public static boolean odd(int number) {
                  return number % 2 != 0;
              }
          
          
              /**
               * 這種方法的性能更好。
               */
              public static boolean odd(int number) {
                  return (number & 1) != 0;
              }
          
          

          總結

          無論你何時使用到了取余操作符,都要考慮到操作數和結果的符號。

          該操作符的行為在其操作數非負時是一目了然的,但是當一個或兩個操作數都是負數時,它的行為就不那么顯而易見了。


          今天的問題

          請考慮下面這段話所描述的問題:

          小明在超市購買了一個價值¥1.10的東西,但是他錢包中只有兩元一張的鈔票。如果他用一張兩元的鈔票支付,那么應該找給他多少零錢呢?

          下面是一個試圖解決上述問題的程序,它會打印出什么呢?

          
          public class Change{
              public static void main(String args[]){
                  System.out.println(2.00 - 1.10);
              }
          }
          
          
          posted on 2008-05-16 21:38 李四飛刀 閱讀(1304) 評論(2)  編輯  收藏 所屬分類: 每日一題

          FeedBack:
          # re: 第 2 天: 解答 -- 判斷是否為奇數, 問題 -- 找零錢 2008-05-16 21:55 Edward's
          呵呵,1天1分鐘  回復  更多評論
            
          # re: 第 2 天: 解答 -- 判斷是否為奇數, 問題 -- 找零錢 2008-05-16 22:37 lvq810
          Java解惑  回復  更多評論
            
          主站蜘蛛池模板: 常州市| 浦北县| 景宁| 万盛区| 黔西| 开化县| 保康县| 安阳市| 德安县| 如东县| 鄂托克旗| 余干县| 依安县| 浙江省| 六枝特区| 卫辉市| 盐池县| 顺昌县| 谢通门县| 连州市| 星座| 南宁市| 疏勒县| 常山县| 汶上县| 永德县| 那曲县| 汤阴县| 林州市| 厦门市| 东兴市| 渭源县| 疏勒县| 凯里市| 涪陵区| 泰州市| 张家川| 勐海县| 长沙县| 台南县| 永福县|