隨筆 - 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解惑  回復  更多評論
            
          主站蜘蛛池模板: 南雄市| 镇坪县| 射洪县| 龙里县| 门源| 宜章县| 三亚市| 滨州市| 穆棱市| 轮台县| 鄱阳县| 临潭县| 鱼台县| 崇义县| 博野县| 正阳县| 富源县| 莒南县| 万盛区| 赤峰市| 沈阳市| 祁东县| 两当县| 新闻| 白山市| 霞浦县| 翁源县| 高唐县| 定襄县| 响水县| 康平县| 长治县| 余江县| 南木林县| 开江县| 道孚县| 宜兰县| 东兰县| 南阳市| 合水县| 奈曼旗|