第一节 按位运算

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 }

 

练习:判断从键盘输入的年份是闰年还是平年。

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 }


练习:输入月份判断季节;

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 }