位运算和循环结构
1.位运算符。
(1)<<左移(变大):左边的数是操作数,右边的数位移的个数。
5<<2: -》5*2*2
a.5转换2进制数:101
b.转成2进制数后,不足八位数补足8位:00000101
c,将八位的2进制数,左边移除2位:000101
d.移除位数后,不足八位数,右补0:00010100
e.将最终的二进制数转换为10进制数:20
(2)>>右移(变小):左边的数是操作数,右边的数位移的个数。
5>>2:
a.5转换2进制数:101
b.转成2进制数后,不足八位数补足8位:00000101
c,将八位的2进制数,右边移除2位:000001
d.移除位数后,不足八位数,左补0:00000001
e.将最终的二进制数转换为10进制数:1
(3)& 位与: 位数对齐运算,有0则为0,全1才为1
5&2:
a.将左右两边的数转换为二进制数:101, 10
b,将二进制数不足八位转换为八位数将上下对齐:
00000101
00000010
c.位数对齐运算,有0则为0,全1才为1: 0000000 0
d.将结果的二进制数转换10进制:0
(4)| 位或: 位数对齐运算,有1则为1,全0才为0
5|2:
a.将左右两边的数转换为二进制数:101, 10
b,将二进制数不足八位转换为八位数将上下对齐:
00000101
00000010
c.位数对齐运算,有1则为1,全0才为0: 00000 1 1 1
d.将结果的二进制数转换10进制:7
(5)^ 位异或: 位数对齐运算,相同为0,不同为1
5^2:
a.将左右两边的数转换为二进制数:101, 10
b,将二进制数不足八位转换为八位数将上下对齐:
00000101
00000010
c.位数对齐运算,相同为0,不同为1:00000 1 11
d.将结果的二进制数转换10进制:7
2.程序中的结构:顺序结构,选择结构,循环结构。
注:字符串与字符串的比较: 字符串变量名.equals("比较的值");
其它类型比较(int,double,boolean): 变量名1==变量名2;
3.if结构:单分支的选择问题
语法:if(条件){
语句块:
}
eg:int today=5;
if(today==5){
System.out.println("考试");
}
4.if-else结构:双分支问题
语法:if(条件){//true
语句块1;
}else{//false
语句块2;
}
eg:System.out.println("这周考试第一名的同学是男生吗?(y/n)");
//从键盘上接收值并用变量存下来
String answer=input.next();
//用if-else结构
if(answer.equals("y")){
System.out.println("恭喜你获得第一名,给你介绍一个女朋友");
}else{
System.out.println("恭喜你获得第一名,给你介绍一个男朋友");
}
5.多重if结构:多分支问题。最多只能执行一个分支。
语法:if(条件1){
语句块1;
}else if(条件2){
语句块2;
}else if(条件3){
语句块3;
}else{
}
注:(1)在多重if选择结构中,if块有且仅有一个,else if块可以有1到多个,else有且仅有0个到1个。
(2)在多重if选择结构中,如果是作区间判断问题,分支之间不能互换位置。
(3)在多重if选择结构中,如果是等值判断问题,分支之间可以互换位置。
eg:System.out.println("请输入考试成绩:");
//从键盘上接收考试成绩并用变量存下来
double score=input.nextDouble();
//用多重if选择结构
if(score>=90){
System.out.println("优");
}else if(score>=80){
System.out.println("良");
}else if(score>=60){
System.out.println("合格");
}else{
System.out.println("不合格,抄写代码");
}
6.Switch结构:多分支等值判断问题
语法:switch(表达式){
case 值1:
语句块1;
break;//跳出当前结构
case 值2:
语句块2;
break;
case 值3:
语句块3;
break;
...
default:
break;
}
注:(1)表达式的数据类型:byte,short,int,char,String(在Jdk1.6以上版本支持)。
(2)case块的数量没限制,default块有且仅0个到1个。在同一个Switch结构中,case后面的常量 值不可以相同。
(3)一般情况下,每个case块后面都有break;如果case块中没有break,它只判断第一次,一直会执行,直到遇到break或遇到结尾的}才会执行完。break;//跳出当前结构。
(4)case块或default块换个位置无影响。
eg:System.out.println("请输入今天是星期几?(1-7)");
//从键盘上接收一个int值并用变量存
int today=input.nextInt();
switch(today){
case 1:
System.out.println("炸酱面");
break;//跳出当前结构
case 2:
System.out.println("牛肉面");
break;
case 3:
System.out.println("鸡蛋面");
break;
case 4:
System.out.println("拉面");
break;
case 5:
System.out.println("热干面");
break;
case 6:
System.out.println("凉面");
break;
default:
System.out.println("喝水");
break;
}
7.多重if VS switch
相同点:都可以解决多分支的等值判断问题。
不同点:switch只可以用来解决多分支的等值判断问题。多重if可以用来解决所有多分支问题。
多分支的区间判断的问题只能用多重if。
8.嵌套选择结构:在一个选择结构中可以完整嵌套另一个选择结构。嵌套要正确。
嵌套的层次无要求。可以嵌套任意层。
eg:System.out.println("请输入你的成绩:");
double time=input.nextDouble();
//嵌套的选择结构
if(time<10){
System.out.println("请输入你的性别:");
String sex=input.next();
if(sex.equals("男")){
System.out.println("恭喜你,进入男子级决赛");
}else{
System.out.println("恭喜你,进入女子级决赛");
}
}else{
System.out.println("谢谢参与");
}