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

          常用鏈接

          留言簿(1)

          隨筆分類(9)

          隨筆檔案(9)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          第 1 天的問題

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

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

          第 1 天問題的解答

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

          原因

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

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

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

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

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

          解決辦法

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

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

          總結(jié)

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

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


          今天的問題

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

          小明在超市購買了一個價值¥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 李四飛刀 閱讀(1310) 評論(2)  編輯  收藏 所屬分類: 每日一題

          FeedBack:
          # re: 第 2 天: 解答 -- 判斷是否為奇數(shù), 問題 -- 找零錢 2008-05-16 21:55 Edward's
          呵呵,1天1分鐘  回復  更多評論
            
          # re: 第 2 天: 解答 -- 判斷是否為奇數(shù), 問題 -- 找零錢 2008-05-16 22:37 lvq810
          Java解惑  回復  更多評論
            
          主站蜘蛛池模板: 青岛市| 博湖县| 昆山市| 宝兴县| 长泰县| 临夏县| 尼玛县| 凉城县| 肇东市| 丹阳市| 灵川县| 通道| 台中市| 大名县| 行唐县| 尖扎县| 五家渠市| 齐齐哈尔市| 广州市| 巴楚县| 西贡区| 博爱县| 突泉县| 古浪县| 沂源县| 绍兴县| 民丰县| 南澳县| 林西县| 郁南县| 新营市| 清丰县| 两当县| 灌阳县| 萝北县| 沙坪坝区| 南阳市| 罗江县| 昆明市| 玉屏| 河西区|