JavaSE学习(三):按位运算—控制流程(顺序、分支、循环)
第一节 按位运算
1.1按位运算符& |
1.1.1按位运算符可作算术运算
做算术运算先将十进制转为二进制数,再按位计算,按位与全部为1,才为1,只要有0则为0;按位或只要有1则为1,全部为0才为0。最后按位输出再转为十进制。
7&3 = 3 ----- 0111 & 0011 == 0011 3
7|3 = 7 ----- 0111 & 0011 == 0011 7
1.1.2按位运算符可作逻辑运算
按位与&和按位或| 做逻辑功能时,与逻辑与&& 逻辑||逻辑功能一样,不一样的是没有短路功能。
面试题:& 与&&区别。
1:运算功能。
2:短路功能。
例程:Demo2.java
1 public class Demo2{
2 public static void main(String[] args){
3 int i=5;
4 int j=6;
5 System.out.println(++i>j-- & i++<j++ );//false i=7 j=6 并没有发生短路功能
6 System.out.println(++i>j-- | --i<j++ );//truei=7 j=6 也没有发生短路功能
7 System.out.println("i="+i+",j="+j);
8 }
9 }
1.2其他位运算符
<< 左位移 >>右位移 ^按位异或
主要用于对数值的快速缩放。
第二节 数据结构
顺序结构、分支结构、循环结构
2.1顺序结构
按顺序一步一步执行,常见程序比如main方法。
2.2分支结构
2.1.1单分支结构:if else
语法:
if (布尔表达式) {
内容1;
} else {
内容2;
}
执行步骤:布尔表达式为true执行内容1,为false执行内容2
例子:Demo3.java
1 public class Demo3{
2 public static void main(String[] args) {
3 int i = 4;
4 if ( i < 5 ) {
5 System.out.println("我是if内容");
6 } else {
7 System.out.println("我是else内容");
8 }
9 System.out.println("我是顺序结构");
10 }
11 }
练习:判断两个、三个数的最大值。
text1.java
1 public class Text1{
2 public static void main(String[] args) {
3 //求两个、三个数的最大值
4 method1 ();
5
6 }
7
8 public static void method1 () {
9 int i =3;
10 int j = 4;
11 int k = 6;
12 int max ;
13 if (i >j) {
14 max = i;
15 } else {
16 max = j;
17 }
18
19 System.out.println(max);
20 System.out.println(k>max ? k:max);
21 }
22
23 }
注:有时候省略了else {},只判断单个if内容;单个if时可以省略其后的{},但是不建议省略,因为{}表示作用范围,后期改变内容可能会引起错误。
2.1.2扫描器函数:Scanner类
语法:Scanner sc = new Scanner(System.in); //创建一个扫描器
常用的方法:
next(): 获取再后台输入的字符串
nextInt():获取在控制台输入的int类型数据;
nextDouble():获取在控制台输入的double类型数据;
例程:Demo5.java
1 import java.util.Scanner;
2
3 public class Demo5{
4 //Scanner类的应用
5 public static void main(String [] args){
6 //创建sc对象
7 Scanner sc = new Scanner(System.in);
8 System.out.println("请输入字符串:");
9 //条用next()函数
10 String str = sc.next();
11 System.out.println(str);
12 //获取int类型数据
13 System.out.println("请输入int数据:");
14 int i = sc.nextInt();
15 System.out.println(i);
16 }
17
18 }
练习:判断从键盘输入的年份是闰年还是平年。
Text2.java
1 import java.util.Scanner;
2
3 public class Text2{
4 //Scanner类的应用
5 public static void main(String [] args){
6 //创建sc对象
7 Scanner sc = new Scanner(System.in);
8 //获取int类型数据
9 System.out.println("请输入要判断的年份:");
10 int i = sc.nextInt();
11 if (i%4==0 && i%100!=0 || i%400==0 ) {
12 System.out.println(i+"年是闰年!");
13 } else {
14 System.out.println(i+"年是平年!");
15 }
16
17 }
18
19 }
2.2.1多分支结构:if else if else
语法:
if (布尔表达式) {
语句1;
} else i f(布尔表达式) {
语句2;
} else {
语句3;
}
执行步骤:满足哪一个条件执行对应内容都不满足执行else里的内容
注:若同时满足多个条件时,只执行第一次满足条件的语句块,后面的不会执行。
例程:Demo6.java
1 import java.util.Scanner;
2 public class Demo6{
3 /**
4 给定分数判断等级
5
6 */
7 public static void main(String[] args) {
8 Scanner sc = new Scanner(System.in);
9 System.out.println("请输入成绩");
10 int score = sc.nextInt();
11
12 if (score>=90 && score<=100) {
13 System.out.println("成绩为"+'A');
14
15 }
16 if (score>=80 && score<90) {
17 System.out.println("成绩为"+'B');
18
19 }
20
21 if (score>=70 && score<80) {
22 System.out.println("成绩为"+'C');
23
24 }
25
26 if (score>=60 && score<70) {
27 System.out.println("成绩为"+'D');
28
29 }
30 if (score>=0 && score<60) {
31 System.out.println("成绩不合格");
32
33 } else {
34 System.out.println("输入错误!");
35
36 }
37
38 }
39
40 }
练习:输入月份判断季节;
Text3.java
1 import java.util.Scanner;
2
3 public class Text3{
4 //Scanner类的应用
5 public static void main(String [] args){
6 //创建sc对象
7 Scanner sc = new Scanner(System.in);
8 //获取int类型数据
9 System.out.println("请输入要判断的月份:");
10 int month = sc.nextInt();
11 if (month==4 || month==3 || month ==5 ) {
12 System.out.println(month+"月是春季");
13
14 } else if (month==6 || month==7 || month ==8 ) {
15 System.out.println(month+"月是夏季");
16
17 } else if (month==9 || month==10 || month ==11 ) {
18 System.out.println(month+"月是秋季");
19
20 } else if (month==12 || month==1 || month ==2 ) {
21 System.out.println(month+"月是冬季");
22
23 } else {
24 System.out.println("输入月份错误!");
25
26 }
27
28 }
29
30 }
2.2.2多分支结构:switch case
语法:
switch (KEY ) {
case key1:
语句1;
break;
case key2:
语句1;
break;
.......
default
语句n;
}
语法解析:匹配KEY 与key值,直到值相等时执行对应的语句,若都不匹配则执行default里的内容。
注: KEY值的数据类型可以是 int、short、byte、char ,不支持long类型。
JDK5增加了枚举 ,JDK7增加了字符串String类型
例程:demo9.java
1 public class Demo9{
2 public static void main(String[] args){
3 //switch case key支持String类型 JDK7之后支持
4 String key="java";
5 switch(key){
6 case "c":
7 System.out.println("学习c语言");
8 break;
9 case "java":
10 System.out.println("学习java语言");
11 break;
12 default:
13 System.out.println("学习Python语言");
14 }
15 }
16 }
注意事项:
1、break作用:作为结束符,防止渗透(从满足KEY值到的内容开始直到执行结束)
例程:Demo10.java
1 public class Demo10{
2 public static void main(String[] args){
3 //switch case 中break用法
4 int key=1;
5 int count=0;
6 switch(key){
7 case 1:
8 count++;
9 // break;
10 case 2:
11 count++;
12 break;//终止渗透
13 case 3:
14 count++;
15 default:
16 System.out.println("count");
17 }
18 System.out.println("count="+count);//2
19 }
20 }
练习:1、从键盘输入1~7匹配周几;
2、从键盘输入月份匹配季节,用switch
2、default可以省略但是不建议省略,default相当于提示作用;default可以在任意的位置(按顺序执行)。
例程:Txte5.java
1 import java.util.Scanner;
2
3 public class Text5{
4 public static void main(String[] args){
5 Scanner sc = new Scanner(System.in);
6 System.out.println("请输入月份");
7
8 int month = sc.nextInt();
9 switch (month){
10 case 3:
11 case 4:
12 case 5:
13 System.out.println(month+"月是春季!");
14 break;
15 case 6:
16 case 7:
17 case 8:
18 System.out.println(month+"月是夏季!");
19 break;
20 case 9:
21 case 10:
22 case 11:
23 System.out.println(month+"月是秋季!");
24 break;
25 case 12:
26 case 1:
27 case 2:
28 System.out.println(month+"月是冬季!");
29 break;
30 default :
31 System.out.println(month+"月地球没有!");
32 }
33 }
34
35 }