国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

八種方法(實現(xiàn)兩個數(shù)互換),絕了絕了!

開發(fā) 前端
當然在Java中我們一般運用按位操作符很少,而我們最開始接觸按位操作符,很可能是從C語言或者數(shù)字邏輯與電路。

 [[343266]]

實現(xiàn)兩個數(shù)互換的八種方法

基本數(shù)據(jù)類型

借助第三個變量

  1. package 貪心;/* 
  2. 作者     :XiangLin 
  3. 創(chuàng)建時間 :2020/9/15 22:48 
  4. 文件     :XX.java 
  5. IDE      :IntelliJ IDEA 
  6. */ 
  7.  
  8. import java.util.Random; 
  9.  
  10. public class Exchange1 { 
  11.     public static void main(String[] args) { 
  12.         /** 
  13.          * 隨機生成兩個固定序列的0-100之間的整數(shù), 
  14.          * 其中101表示生成的數(shù)范圍區(qū)間在:[0-101) 
  15.          */ 
  16.         Random random = new Random(47); 
  17.         int a = random.nextInt(101); 
  18.         int b = random.nextInt(101); 
  19.         System.out.println("交換前:a = " + a + ", b = " + b); 
  20.  
  21.         /** 
  22.          * 借助第三個變量實現(xiàn)第三個數(shù)互換 
  23.          */ 
  24.         int t = a; // t == a 
  25.         a = b;     // a == b 
  26.         b = t;     // b == t == a 
  27.         System.out.println("交換后:a = " + a + ", b = " + b); 
  28.     } 

控制臺輸出如下:

 

如果有不明白的朋友,可以自己準備三個杯子,一個空杯代表變量t,兩個杯子裝上水分別代表變量a、b,然后互換一下a、b兩個杯子里的水即可明白。

 

不借助第三個變量

  1. package 貪心;/* 
  2. 作者     :XiangLin 
  3. 創(chuàng)建時間 :2020/9/15 22:51 
  4. 文件     :cccc.java 
  5. IDE      :IntelliJ IDEA 
  6. */ 
  7.  
  8. import java.util.Random; 
  9.  
  10. public class Exchange2 { 
  11.     public static void main(String[] args) { 
  12.         /** 
  13.          * 隨機生成兩個固定序列的0-100之間的整數(shù), 
  14.          * 其中101表示生成的數(shù)范圍區(qū)間在:[0-101) 
  15.          */ 
  16.         Random random = new Random(48); 
  17.         int a = random.nextInt(101); 
  18.         int b = random.nextInt(101); 
  19.         System.out.println("交換前:a = " + a + ", b = " + b); 
  20.  
  21.         a = a + b; // a == a + b 
  22.         b = a - b; // b == a + b - b == a, 此時b == a 
  23.         a = a - b; // a == a + b - a == b, 此時a == b 
  24.         System.out.println("交換后:a = " + a + ", b = " + b); 
  25.     } 

控制臺輸出如下:

 

通過乘除操作實現(xiàn)兩個數(shù)互換

  1. package 貪心;/* 
  2. 作者     :XiangLin 
  3. 創(chuàng)建時間 :2020/9/15 22:54 
  4. 文件     :xxx.java 
  5. IDE      :IntelliJ IDEA 
  6. */ 
  7.  
  8. import java.util.Random; 
  9.  
  10. public class Exchange3 { 
  11.     public static void main(String[] args) { 
  12.         /** 
  13.          * 隨機生成兩個固定序列的0-100之間的整數(shù), 
  14.          * 其中101表示生成的數(shù)范圍區(qū)間在:[0-101) 
  15.          */ 
  16.         Random random = new Random(50); 
  17.         int a = random.nextInt(101); 
  18.         int b = random.nextInt(101); 
  19.         System.out.println("交換前:a = " + a + ", b = " + b); 
  20.  
  21.         a = a * b; // 此時a == a * b 
  22.         b = a / b; // b == a * b / b == a, 此時b == a 
  23.         a = a / b; // a == a * b / a == b, 此時a == b 
  24.         System.out.println("交換后:a = " + a + ", b = " + b); 
  25.     } 

Output:

 

利用賦值運算符

因為這兩種方法是筆者后面補充的,所以第七種和第八種方法放在前面

利用賦值和加減來實現(xiàn)兩個數(shù)互換

  1. package 貪心;/* 
  2. 作者     :XiangLin 
  3. 創(chuàng)建時間 :2020/9/15 22:58 
  4. 文件     :xx.java 
  5. IDE      :IntelliJ IDEA 
  6. */ 
  7.  
  8. public class Exchange7 { 
  9.     public static void main(String[] args) { 
  10.  
  11.         /** 
  12.          *  隨機生成兩個0-100之間的整數(shù), 
  13.          *  其中Math.random()會生成[0-1)之間任意的double類型的數(shù) 
  14.          *  因此101表示生成的數(shù)范圍區(qū)間在:[0-101) 
  15.          */ 
  16.         int a = (int) (Math.random() * 101); 
  17.         int b = (int) (Math.random() * 101); 
  18.         System.out.println("交換前: a = " + a + ", b = " + b); 
  19.  
  20.         a = b + a - (b = a); // a == b + a - a == b, a == b 
  21.         System.out.println("交換后: a = " + a + ", b = " + b); 
  22.     } 

控制臺輸出如下:

 

利用賦值和加乘來實現(xiàn)兩個數(shù)互換

  1. package 貪心;/* 
  2. 作者     :XiangLin 
  3. 創(chuàng)建時間 :2020/9/15 23:00 
  4. 文件     :xxx.java 
  5. IDE      :IntelliJ IDEA 
  6. */ 
  7.  
  8. public class Exchange8 { 
  9.     public static void main(String[] args) { 
  10.  
  11.         /** 
  12.          *  隨機生成兩個0-100之間的整數(shù), 
  13.          *  其中Math.random()會生成[0-1)之間任意的double類型的數(shù) 
  14.          *  因此101表示生成的數(shù)范圍區(qū)間在:[0-101) 
  15.          */ 
  16.         int a = (int) (Math.random() * 101); 
  17.         int b = (int) (Math.random() * 101); 
  18.         System.out.println("交換前: a = " + a + ", b = " + b); 
  19.  
  20.         a = b + (b = a) * 0; // a == b + a * 0 == b, a == b 
  21.         System.out.println("交換后: a = " + a + ", b = " + b); 
  22.     } 

控制臺輸出如下:

 

異或

在介紹第四種方法之前,首先要跟大家介紹一下Java中的"異或"操作符(^)。

異或操作符是Java中按位操作符的一種,那么什么是按位操作符呢?

按位操作符用來操作整數(shù)基本數(shù)據(jù)類型中的單個"比特"(bit),即二進制位。我們都知道,計算機中是采用二進制計數(shù),而不是十進制計數(shù)。也就是說,計算機中沒有我們所謂的2、3、4、5 … 100 … 1000 … ,計算機中有的只是0和1,逢二便進一。而按位操作符會對兩個參數(shù)中對應的位,也就是對用二進制表示的兩個參數(shù)相對應的0或1,執(zhí)行布爾代數(shù)運算,并最終生成一個結果。

當然在Java中我們一般運用按位操作符很少,而我們最開始接觸按位操作符,很可能是從C語言或者數(shù)字邏輯與電路。事實上,按位操作符來源于C語言面向底層的操作,這種操作經(jīng)常需要直接操縱硬件,設置硬件寄存器內(nèi)的二進制位。而Java的設計初衷是嵌入電視機機頂盒內(nèi),所以這種面向底層的操作被保留了下來。Java技術的三大版本之一:JavaME,Java平臺微型版正是用作嵌入式開發(fā),用來開發(fā)數(shù)字機頂盒、可視電話等電子設備。

了解了按位操作符的概念,那么接下來,我們來了解"異或"操作

如a ^ b,若a、b兩個值不同,則異或結果為1;若a、b兩個數(shù)相同,則異或結果為0。

大家如果要記憶的話,可以記住六字真言:同為0,異為1。

或者明白或運算的朋友也可以通過字面意思來理解,若兩數(shù)相異(要么是0和1,要么是1和0),則執(zhí)行或運算;若兩數(shù)相同(同為0,或同為1),則結果為0。

如果還是有點抽象的話,沒得事,直接上代碼:

  1. package 貪心;/* 
  2. 作者     :XiangLin 
  3. 創(chuàng)建時間 :2020/9/15 23:05 
  4. 文件     :xxx.java 
  5. IDE      :IntelliJ IDEA 
  6. */ 
  7.  
  8. public class Test { 
  9.     public static void main(String[] args) { 
  10.         /** 
  11.          * 分別把結果以二進制的形式輸出 
  12.          */ 
  13.         System.out.println("3的二進制:" + Integer.toBinaryString(3)); 
  14.         System.out.println("4的二進制:" + Integer.toBinaryString(4)); 
  15.         System.out.println("3 ^ 3 的二進制:" + Integer.toBinaryString(3 ^ 3)); 
  16.  
  17.         System.out.print("3 ^ 0 的二進制:" + Integer.toBinaryString(3 ^ 0)); 
  18.         if (3 == (3 ^ 0)) 
  19.             System.out.println(",也就是十進制的3"); 
  20.  
  21.         System.out.print("4 ^ 3 ^ 3 的二進制:" + Integer.toBinaryString(4 ^ 3 ^ 3)); 
  22.         if (4 == (4 ^ 3 ^ 3)) 
  23.             System.out.println(",也就是十進制的4"); 
  24.     } 

Output:

 

好戲開場,通過異或操作實現(xiàn)兩個數(shù)互換

  1. package 貪心;/* 
  2. 作者     :XiangLin 
  3. 創(chuàng)建時間 :2020/9/15 23:08 
  4. 文件     :xx.java 
  5. IDE      :IntelliJ IDEA 
  6. */ 
  7.  
  8. import java.util.Random; 
  9.  
  10. public class Exchange4 { 
  11.     public static void main(String[] args) { 
  12.         /** 
  13.          * 隨機生成兩個固定序列的0-100之間的整數(shù), 
  14.          * 其中101表示生成的數(shù)范圍區(qū)間在:[0-101) 
  15.          */ 
  16.         Random random = new Random(51); 
  17.         int a = random.nextInt(101); 
  18.         int b = random.nextInt(101); 
  19.         System.out.println("交換前:a = " + a + ", b = " + b); 
  20.  
  21.         a = a ^ b; // 此時, a == a ^ b 
  22.         b = a ^ b; // b == a ^ b ^ b == a, 此時b == a 
  23.         a = a ^ b; // a == a ^ b ^ a == b, 此時a == b 
  24.         System.out.println("交換后:a = " + a + ", b = " + b); 
  25.     } 

Output:

 

引用數(shù)據(jù)類型

想必大家已經(jīng)學了四種方法,已經(jīng)對兩個數(shù)互換信心滿滿,那么接下來,我們來看一道面試題:

  1. package 貪心;/* 
  2. 作者     :XiangLin 
  3. 創(chuàng)建時間 :2020/9/15 23:10 
  4. 文件     :xx.java 
  5. IDE      :IntelliJ IDEA 
  6. */ 
  7.  
  8. public class Exchange5 { 
  9.     public static void main(String[] args) { 
  10.         Integer a = 10; 
  11.         Integer b = 20; 
  12.  
  13.         swop(a, b); 
  14.         // 打印結果:a = 20, b = 10 
  15.         System.out.println("a = " + a + ", b = " + b); 
  16.     } 
  17.  
  18.     private static void swop(Integer a, Integer b) { 
  19.         // 完成此處代碼 
  20.     } 

如代碼所示,完成指定位置的代碼,使得程序最后的運行結果為:a = 20, b = 10

你可能覺得這還不簡單,然后"刷刷刷"完成可能如以下的代碼:

  1. private static void swop(Integer a, Integer b) { 
  2.         a = a ^ b; 
  3.         b = a ^ b; 
  4.         a = a ^ b; 
  5.     } 

然后再看輸出結果就傻眼了:

 

納尼,不變?這是為什么?想知道為什么的可能需要自行了解一下Java內(nèi)存模型了,畢竟Java里面沒有C語言的指針(小聲bb)。當然,本博主以后可能也會出這方面的博客。

下面讓我來揭曉正確答案吧!

  1.  private static void swop(Integer a, Integer b) throws NoSuchFieldException, IllegalAccessException { 
  2.         // 完成此處代碼 
  3. //        a = a ^ b; 
  4. //        b = a ^ b; 
  5. //        a = a ^ b; 
  6.  
  7.         int x = a; 
  8.         int y = b; 
  9.  
  10.         // 運用反射來操作Integer 
  11.         Class c = Integer.class; 
  12.         Field field = c.getDeclaredField("value"); 
  13.         // 授權訪問私有 
  14.         field.setAccessible(true); 
  15.         // 將 a、b的值分別設置為y、x的值 
  16.         field.setInt(a, y); 
  17.         field.setInt(b, x); 
  18.  
  19.  
  20.     } 

當當當當,控制臺輸出如下:

 

至于如果有朋友想了解反射的知識,可以關注我的博客哦!畢竟反射是我當年學習JavaSE知識覺得最神奇也最喜歡的三個知識之一。

至于第六種方法嘛:

  1. private static void swop(Integer a, Integer b) { 
  2.        System.out.println("a = " + b + ", b = " + a); 
  3.        // 終止Java虛擬機的運作 
  4.        System.exit(0); 
  5.    } 

哈哈,不要打我哦,我就皮這一下…

畢竟,題目只是說,使得運行結果為:a = 20, b = 10 即可(^_−)☆

所有巧合的是要么是上天注定要么是一個人偷偷的在努力。

結束!

作者:古闕月

原文鏈接:http://nxw.so/44cPJ

本文轉載自微信公眾號「五角錢的程序員」,可以通過以下二維碼關注。轉載本文請聯(lián)系五角錢的程序員公眾號。

 

 

責任編輯:武曉燕 來源: 五角錢的程序員
相關推薦

2025-01-16 08:50:33

2021-04-22 09:56:32

MYSQL開發(fā)數(shù)據(jù)庫

2024-11-13 00:57:36

2020-08-20 08:39:54

CTO代碼數(shù)據(jù)

2023-12-29 09:23:25

Python回調(diào)函數(shù)遍歷字典

2012-07-13 11:32:16

網(wǎng)絡出口

2021-08-09 23:53:50

排序中國

2010-05-31 09:51:51

云計算ROI

2022-12-20 07:44:09

梅西封王卡塔爾

2025-06-03 04:10:00

2025-01-13 07:10:00

diagrams畫圖工具draw.io

2021-12-12 18:38:31

visio畫圖工具

2025-04-17 04:00:00

2012-05-09 14:57:38

夢想InstagramOffer

2022-10-14 10:36:10

職業(yè)道路職業(yè)生涯

2017-10-20 09:04:54

數(shù)據(jù)中心方法綠化

2025-06-03 08:33:53

2009-04-07 10:52:00

職場工作方法

2010-11-23 11:53:37

MySQL查詢表字段

2023-12-25 15:38:55

點贊
收藏

51CTO技術棧公眾號

超碰成人免费在线| 欧美精品视频www在线观看| 高清国产在线一区| 北岛玲一区二区三区四区| 男女激情视频网站| 色综合天天综合网天天看片| 亚洲伊人久久大香线蕉av| 丁香六月激情网| 一区2区3区在线看| 九九99久久精品在免费线bt| 国产精品一区二区免费| 麻豆成人久久精品二区三区小说| 在线丝袜欧美日韩制服| 国产一区二区精品久久| 中文字幕制服丝袜在线| 99久久99久久久精品齐齐| 亚洲an天堂an在线观看| 国产欧美日韩三区| 二区三区在线| 亚洲亚洲人成综合网络| 松下纱荣子在线观看| 97超级碰碰碰久久久| 国产精品一区毛片| 国产v亚洲v天堂无码久久久| 中文字幕五月欧美| 97电影在线观看| 精品久久久久久中文字幕| 九九精品在线播放| 在线成人av观看| 日韩久久精品一区| bbbbbbbbbbb在线视频| 欧美日韩美女在线| 中出在线观看| 亚洲国产aⅴ天堂久久| 成人丁香基地| 自拍偷拍国产精品| 九色成人在线| 亚洲男人的天堂在线aⅴ视频| 日本男人操女人| 中文字幕高清不卡| 狠狠躁狠狠躁视频专区| 国产精品欧美经典| 色总=综合色| 亚洲一区二区欧美激情| 欧美套图亚洲一区| 欧美精品在线观看播放| 羞羞视频在线观看不卡| 欧美va天堂va视频va在线| 538在线精品| 在线观看成人黄色| 一区二区三区高清在线观看| 午夜精品久久久久久久久久久久久| 国产一区福利| 国产精品久久久久久搜索| 亚洲成人精品| 美女精品国产| 国产成人aaa| 日本888xxxx| 婷婷成人综合网| 黄网站免费在线观看| 精品夜色国产国偷在线| 综合欧美精品| 韩国97影院| 成人综合av网| 亚洲3p在线观看| 国产韩日影视精品| 欧美激情在线观看视频| 91免费精品国偷自产在线在线| 99久久久久国产精品免费 | 欧美电影影音先锋| 亚洲精品久久久久中文字幕欢迎你| 欧美97人人模人人爽人人喊视频| 久久综合久久色| 日韩av黄色在线观看| 亚洲国产精品久久不卡毛片 | 国产亚洲综合av| 在这里有精品| 国产91美女视频| 久久久女人电视剧免费播放下载 | 视频一区视频二区中文字幕| 欧美黑人又粗又大又爽免费| 欧美色区777第一页| 91精品入口| 中文字幕一区二区三区乱码 | 国产精品一级片| 宅男噜噜噜66国产免费观看| 色婷婷久久99综合精品jk白丝| 免费高潮视频95在线观看网站| www亚洲欧美| 久久久久国产一区二区三区四区 | 亚洲人午夜精品天堂一二香蕉| 97色婷婷成人综合在线观看| 欧美日韩高清在线播放| 伊人免费在线| 在线视频一区观看| 国内精品久久久久| 精品国产福利在线| 蜜臀精品久久久久久蜜臀| 99在线视频影院| 丝袜美女写真福利视频| 精品国产一区二区三区久久久久久| 欧美丰满一区二区免费视频| 欧美黄色aaaa| 成人免费淫片| 国产精品99久久久久久人| 久久福利视频一区二区| 国产网友自拍视频导航网站在线观看| 成人亚洲欧美一区二区三区| 国产区在线观看成人精品| 国产成人77亚洲精品www| 亚洲天堂第一区| 精品无人区乱码1区2区3区在线 | 欧洲精品国产| 欧美日韩国产乱码电影| 婷婷电影在线观看| 综合久久国产| 国产精品美女视频网站| 亚洲第一中文字幕| 一区二区三区影院| 在线小视频网址| 91精品国产综合久久久久久久 | 污片在线免费看| 欧美黑人xxx| 亚洲人成伊人成综合网久久久| 国产精品进线69影院| 亚洲精品国产首次亮相| 丝袜中文在线| av免费看网址| 久久99久久99精品中文字幕| 国产人伦精品一区二区| 天天操夜夜操国产精品| 福利视频在线播放| 波多野结衣激情| 91高潮在线观看| 亚洲第一福利在线观看| 国产伦理一区| 国产99re66在线视频| 婷婷亚洲婷婷综合色香五月| 伊人伊成久久人综合网小说| 亚洲最新av网址| 成人一区二区三区中文字幕| 麻豆视频在线免费观看| 1pon在线| 91污色多多| 男女无套免费视频网站动漫| 一本久道综合色婷婷五月| 成人av午夜影院| 国产精品剧情一区二区在线观看| 在线91av| 成人在线观看黄色| 二区三区四区高清视频在线观看| 免费黄网在线观看| 麻豆视频在线播放| 成人福利av| 久久av电影| 黄色欧美成人| 国产一区二区0| 麻豆91在线播放免费| 亚洲免费福利一区| 亚洲成人偷拍| 91福利在线免费| 亚洲欧洲日本精品| 看一级黄色录像| 一区二区三区四区国产| 久久精品magnetxturnbtih| 999视频在线免费观看| 蜜桃av一区二区三区| av成人app永久免费| 日日噜噜噜夜夜爽爽狠狠| 成人中文字幕+乱码+中文字幕| 日韩一级高清毛片| 国产精品亚洲第一| 亚洲男人在线| 免费在线观看av片| 四虎成人在线视频| 鲁一鲁一鲁一鲁一澡| 亚洲精品9999| 成人精品水蜜桃| 欧美精品二区三区四区免费看视频| 久久理论片午夜琪琪电影网| 在线观看国产精品91| 欧美三级一区二区| 日本午夜一区二区| 综合色就爱涩涩涩综合婷婷| 欧美久久精品一级c片| 亚洲一区在线| 国产第一精品| 免费成人美女女| 日韩av片子| 国产精品2024| 欧美性猛交一区二区三区精品 | 日本天堂在线| 欧美a在线看| 欧美禁忌电影网| 久久影院午夜片一区| 亚洲精品国产福利| 日本韩国欧美精品大片卡二| 日韩av资源在线| 精品日本视频| 三级影片在线观看欧美日韩一区二区|