java系统化基础-day02-运算符、选择结构、循环结构

1.java中的运算符

  1 package com.wfd360.day02;
  2 
  3 
  4 import org.junit.Test;
  5 
  6 import java.math.BigInteger;
  7 
  8 /**
  9  * 1.算术运算符[掌握]
 10  * <p>
 11  * 2.自增自减[掌握]
 12  * <p>
 13  * 3.赋值运算[掌握]
 14  * <p>
 15  * 4.比较运算符[掌握]
 16  * <p>
 17  * 5.逻辑运算符[掌握]
 18  * <p>
 19  * 6.位运算符[了解]
 20  * <p>
 21  * 7.三目运算符[掌握]
 22  */
 23 
 24 public class Demo01 {
 25     /**
 26      * 1.算术运算符[掌握]
 27      * 1)加法(+) 加法   正号  字符串拼接
 28      * 2)减法(-) 减法 负号
 29      * 3)乘法 (*) 乘法
 30      * 4)除法(/) 除法
 31      * 整数(小数)相除的例子
 32      * 10/3 =3;  10.0/3=3.33333…
 33      * 0/0
 34      * 0.0/0.0
 35      * 结果是NaN ,任何的NaN都不等于自己(面试题)
 36      * 1.0/0.0
 37      * Infinity,表示无穷大
 38      */
 39     @Test
 40     public void test() {
 41         int i1 = 3 + 2 - 5 * 6;
 42         int i2 = 10 / 3;  // 3
 43         // 3.0 代表整数相除,将运算结果,转变为double
 44         double d1 = 10 / 3;
 45         System.out.println("d1=" + d1);
 46         //double d2 = 10 / 3.0; // 3.3333333333333335
 47         double d2 = 10.0 / 3; // 3.3333333333333335
 48         System.out.println("d2=" + d2);
 49         // 0/0  报错  java.lang.ArithmeticException: / by zero
 50         //int i3=0/0;
 51         // System.out.println("i3="+i3);
 52         //  结果是NaN ,任何的NaN都不等于自己(面试题)
 53         double d3 = 0.0 / 0;
 54         System.out.println(" d3=" + d3);
 55         double d4 = 1.0 / 0; // Infinity,表示无穷大
 56         System.out.println(" d4=" + d4);
 57     }
 58 
 59     /**
 60      * 取模(%) , 取余数
 61      * 案例:假设大学的一个寝室可以住6个人,那么计算1024个大学生一共需要多少个寝室? (本质就是生产中经常用到的分页算法)
 62      */
 63     @Test
 64     public void test2() {
 65         int n = 6;
 66         int m = 1024;
 67         //取余数
 68         int y = m % n;
 69         System.out.println("y=" + y);
 70         //=====================
 71         //如果余数为零那么,一共需要的寝室数=m/n;
 72         //如果余数 不 为零那么,一共需要的寝室数=(m/n)+1;
 73     }
 74 
 75     /**
 76      * 2. 自增自减[掌握]
 77      * ++(自增)     --(自减)
 78      * 自增自减只能够用于 变量,不能用于常量
 79      * 自增自减运算的优先级  比  算术运算符  高
 80      */
 81     @Test
 82     public void test3() {
 83         //===========基本使用==================
 84         int i = 3;  // 表示把3赋值给变量i
 85         i++;      //表示变量i的值加1,i的值变成4
 86         ++i;      //表示变量i的值加 1,i的值变成5
 87         System.out.println("i=" + i);
 88     }
 89 
 90     /**
 91      * 面试题1
 92      */
 93     @Test
 94     public void test4() {
 95         int i = 3;
 96         int j = i++;  // 先复制,在运输算
 97         // i等于多少,j等于多少?
 98         System.out.println("i=" + i);// 4
 99         System.out.println("j=" + j);// 3
100     }
101 
102     /**
103      * 面试题2
104      */
105     @Test
106     public void test5() {
107         int i = 3;
108         int j = ++i;  // 先运算,在赋值
109         // i等于多少,j等于多少?
110         System.out.println("i=" + i);// 4
111         System.out.println("j=" + j);// 4
112     }
113 
114     /**
115      * 面试题3
116      */
117     @Test
118     public void test6() {
119         int i = 3;
120         i = ++i;  // 先运算,在赋值
121         // i等于多少,j等于多少?
122         System.out.println("i=" + i); // 4
123         int j = 3;
124         j = j++;
125         System.out.println("j=" + j); // 3
126     }
127 
128     /**
129      * 面试题3
130      * 破题关键点:
131      * i++是先赋值在执行 自增
132      * ++i 是先执行自增 在赋值
133      */
134     @Test
135     public void test7() {
136         int i = 3;
137         //      3(4)  4(5)  5(6)
138         int a = i++ + i++ + i++;
139         //      7      8     9
140         int b = ++i + ++i + ++i;
141         //请问 a=?  b=? i=?
142         System.out.println("a=" + a);
143         System.out.println("b=" + b);
144         System.out.println("i=" + i);
145     }
146 
147     /**
148      * 3. 赋值运算[简单,与平时的数学逻辑一样]
149      * =    +=     -=     *=     /=    %=
150      * 1)赋值符号的运算顺序?
151      * 从右到左,把符号右边的值赋值到左边的变量中
152      * 2)上面 后五个分别看成是一个整体: 例如 += 看成是一个符号,不要看成两个;
153      */
154     @Test
155     public void test8() {
156         //请先在每行的后面给出i的值,然后用断点观察i值得变换
157         int i = 3;
158         i += 2;// 表示把2 累加到变量 i 中
159         i -= 1; // 表示把-1 累加到变量 i 中
160         i *= 3; // 等价  i=i*3;   划重点:等价不是等于
161         i /= 3; // 等价  i=i/3;
162         i %= 3;  // 等价 i=i%3;
163         System.out.println("i=" + i);
164     }
165 
166     /**
167      * 超级面试题
168      */
169     @Test
170     public void test9() {
171         short s = 3;
172         s += 2; //正常
173         System.out.println("s=" + s);
174         //===========================
175         short s2 = 3;
176         // 语法错误,结果值是int,int不能自动转换为short
177         // s2 = s2+2;
178     }
179 
180     /**
181      * 4.比较运算符[掌握]
182      * ==    !=     >    <    >=    <=    instanceof
183      * 规律:比较运算的结果是一个布尔类型的值(true 或false);
184      * 举例:
185      * 定义一个布尔表达式,打印输出
186      * 特别说明:instanceof 是判断一个对象是否属于某种类型
187      * 是否可以用于我们之前学习的基本数据类型
188      */
189     @Test
190     public void test10() {
191         System.out.println(1 == 2); //false
192         System.out.println(1 <= 2); //true
193         // instanceof
194         //是否可以用于我们之前学习的基本数据类型  ==> 不可以
195         // System.out.println( 1 instanceof int);
196         System.out.println("爱老虎油" instanceof String); // true
197     }
198 
199     /**
200      * 5.逻辑运算符[掌握]
201      * &    |     &&     ||   ^    !
202      * 是应用于多个条件的组合判断。
203      * 示例说明:
204      * 例如小明参加2个学科的考试 java php
205      * 1)java 和 php 同时考100分,奖励 欧洲十日游
206      * 伪代码描述:java==100 并且 php==100
207      * 2)java 和php,只要有一门考100分,奖励 奖励棒棒糖一个
208      * 伪代码描述:java==100 或者 php==100
209      * <p>
210      * 逻辑运算的两边结果值都必须是什么类型?  布尔
211      * <p>
212      * &   :两边都为true ,结果为true
213      * |    : 只要有一边为true,结果为true
214      * && :   两边都为true ,结果为true
215      * ||    : 只要有一边为true,结果为true
216      * ^    : 两边不一样,结果为true ,否则为false,举个例子打印一下
217      * !  : 逻辑非,举个例子打印一下
218      */
219     @Test
220     public void test11() {
221         int java = 100;
222         int php = 100;
223         int c = 90;
224         int mysql = 80;
225         // ||    : 只要有一边为true,结果为true
226         System.out.println(java == 100 || php == 100); //true
227         System.out.println(java == 100 || c == 100); //true
228         System.out.println(mysql == 100 || c == 100); //false
229         // && 两边都为true ,结果为true
230         System.out.println(java == 100 && php == 100); //true
231         System.out.println(java == 100 && c == 100); //false
232         // 逻辑非
233         System.out.println(java != 100); //false
234         System.out.println(c != 100); // true
235 
236         // ^    : 两边不一样,结果为true ,否则为false,举个例子打印一下 (用的很少)
237         System.out.println(java == 100 ^ php == 100); //false
238         System.out.println(mysql == 100 ^ c == 100); //false
239         System.out.println(java == 100 ^ c == 100); //true
240     }
241 
242     /**
243      * &&  ||   和   & |    区别?
244      * 1) & | 既可以充当逻辑运算,也可以是位运算符,怎么区分是逻辑运算还是位运算?
245      * 根据表达式的结果是否为 布尔类型 来判断
246      * 2)双与  双或  具有短路行为  什么意思?
247      * 举个例子 上面小明的考试的成绩 要求是两科都为100分,看到第一科低于100分之后没有必要再看第二科成绩
248      * 代码表示:Java = 100  && php = 100   (java只考了5分)
249      * 如果逻辑运算左边的值能够确定整个逻辑运算表达式的值,那么右边就不执行了,短路了。
250      * && 何时短路 ?    左边表达式结果为false
251      * ||  何时短路 ?    左边表达式结果为true
252      * 思考:如何验证短路行为?
253      * 提示:
254      * 右边表达式用  自增自减,例如 ++i = 5
255      * 或者使用一个编译正常,运行报错的表达式,例如 1/0
256      */
257     @Test
258     public void test12() {
259         int java = 5;
260         int php = 100;
261 
262         // 区分 && 与 &
263         System.out.println(java == 100 && (++php) == 100); // php=100  &&具有短路行为,左边为false时,不在执行右边
264         System.out.println(java == 100 & (++php) == 100); // php=101
265 
266         php = 100;
267         // 区分 || 与 |
268         System.out.println(php == 100 || (++java) == 100); // java=5  ||具有短路行为,左边为true时,不在执行右边
269         System.out.println(php == 100 | (++java) == 100); // java=6
270         System.out.println("java=" + java + " php=" + php);
271     }
272 
273     /**
274      * 面试错误题
275      * 例如:判断一个整数的变量 a里面的数据  在0-100之间
276      * 正确写法: a>0   &&  a<100
277      * 错误写法:   0<  a < 100  (java没有这种语法,不支持)
278      */
279     @Test
280     public void test13() {
281         int a = 10;
282         System.out.println(a > 0 && a < 100);
283 
284         //System.out.println(0 < a < 100); 错误
285     }
286 
287     /**
288      * 十进制转成二进制
289      * String s = Integer.toBinaryString(n)  //将十进制数转成字符串,例如n=5 ,s = "101"
290      * <p>
291      * 将字符串转成整形
292      * int a = Integer.valueof("1002");  //当然s只能是数字类的字符串
293      */
294     @Test
295     public void test14() {
296         //十进制转成二进制
297         String s = Integer.toBinaryString(5);
298         System.out.println("s=" + s);
299         //二进制转变为十进制
300         BigInteger bi = new BigInteger("011", 2);    //转换为BigInteger类型
301         int a = Integer.parseInt(bi.toString());
302         System.out.println("a=" + a);
303     }
304 
305     /**
306      * 6.位运算符[了解]
307      * &    |    ^     ~    <<      >>     >>>
308      * 位运算就是 二进制的位进行运算。
309      * 示例:比如计算 125+176 ,从数学的角度是怎么计算的?
310      * 同理,位运算也类似,比如 3&4
311      * <p>
312      * 可以把1看成是true,把0看成是false
313      * &  :与 位运算,两边为1,结果为1
314      * |   :或 位运算,有一个为1,结果为1
315      * ^  :  异或,两边不一样,就为1,否则为0
316      * ~  :  取反,1变成0  ,0 变成1
317      * << :  向左位移动,例如1<<3
318      * >> :   向右位移动,例如8>>2
319      * >>>:  无符号向右移动
320      * <p>
321      * 注意:
322      * 正数的补码,反码,原码 都一样;
323      * 负数的反码:符号为不变,其他位取反;
324      * 负数的补码:它的反码+1;
325      */
326     @Test
327     public void test15() {
328         // &  :与 位运算,两边为1,结果为1
329         System.out.println(20 & 30); //得到的是十进制数
330         System.out.println("20的二进制:" + Integer.toBinaryString(20));
331         System.out.println("           &");
332         System.out.println("30的二进制:" + Integer.toBinaryString(30));
333         System.out.println("----------------------------------------");
334         System.out.println("            " + Integer.toBinaryString(20 & 30));
335     }
336 
337     @Test
338     public void test16() {
339         // |   :或 位运算,有一个为1,结果为1
340         System.out.println(20 | 30); //得到的是十进制数
341         System.out.println("20的二进制:" + Integer.toBinaryString(20));
342         System.out.println("           |");
343         System.out.println("30的二进制:" + Integer.toBinaryString(30));
344         System.out.println("----------------------------------------");
345         System.out.println("            " + Integer.toBinaryString(20 | 30));
346     }
347 
348     @Test
349     public void test17() {
350         //<< :  向左位移动,例如1<<3  , 左位易的本质运算是,假设 a<<b ,相当于数学中的运算 a乘以2的b次方
351         System.out.println(2 << 3); //得到的是十进制数
352         System.out.println("2的二进制:000" + Integer.toBinaryString(2));
353         System.out.println("           <<3");
354         System.out.println("----------------------------------------");
355         System.out.println("           " + Integer.toBinaryString(2 << 3));
356     }
357 
358     /**
359      * 注意:
360      * 正数的补码,反码,原码 都一样;
361      * 负数的反码:符号为不变,其他位取反;
362      * 负数的补码:它的反码+1;
363      */
364     @Test
365     public void test18() {
366         //~  :  取反,1变成0  ,0 变成1
367         System.out.println(~(-5)); //得到的是十进制数
368         System.out.println("原码:00000000000000000000000000000" + Integer.toBinaryString(5));
369         System.out.println("反码:" + Integer.toBinaryString(-5));
370         System.out.println("补码:00000000000000000000000000000" + Integer.toBinaryString(~(-5)));
371     }
372 
373     /**
374      * 7.三目运算符[掌握]
375      * 语法格式: X ? Y : Z
376      * 1)上面的三目运算整体看成是一个表达式,应该有一个结果值
377      * 2)X ?  布尔类型的值或者结果为布尔类型的表达式
378      * 3)Y  Z  ? 一般来说数据类型相同的值或者表达式
379      * 4)运算的规则?
380      * X 为true,就是 Y 的结果值 ( 冒号前面的表达式的值)
381      * X为false,就是Z的结果值 ( 冒号后面的表达式的值)
382      * x ? y : z
383      * <p>
384      * 注意:  不要受  ? 和    :  的干扰,它们只是一个固定语法格式而已
385      */
386     @Test
387     public void test19() {
388         //举例:找出两个整型变量中的最大值
389         int a = 6;
390         int b = 7;
391         int c = a > b ? a : b;
392         System.out.println("c=" + c);
393         //举例 判断一个数是 奇数 还是 偶数
394         int i = 9;
395         System.out.println(i % 2 == 0 ? "偶数" : "奇数");
396     }
397 
398 }
View Code

2.条件选择结构-if

3.条件选择结构-switch

4.java中的循环结构-while

5.java中的循环结构-for

猜你喜欢

转载自www.cnblogs.com/newAndHui/p/10855474.html