Java的流程控制结构,细节详解
位运算符
&与 |或 ^异或 <<左移 >>右移 >>>无符号右移 ~取反
注意:位运算是针对整数运算的
int i = 6,j = 10;
方式一:利用第三方变量
int k = i;
i = j;
j = k;
方式二:利用加减法
i = i + j;
j = i - j;--->j = i + j - j;-> j = i;
i = i - j;--->i = i + j - i;-> i = j;
方式三:异或运算
i = i ^ j;
j = i ^ j;---> j = i ^ j ^ j;-> j = i;
i = i ^ j;---> i = i ^ j ^ i;-> i = j;
i^=j;j^=i;i^=j;
为什么第三种方式的效率更高却是第一种方式用的更广?
第一种方式的可阅读性更高;第三种方式只能用于运算整数,第二种方式可以用于运算数值型但是不能用于交换其他类型的值例如字符串类型,而第一种方式可以交换任意一种类型的值
流程控制
顺序结构
从上倒下、从左到右一次运行
分支结构
判断结构
if(逻辑值){
代码块;
}
如果代码块只有一句,{}可以省略不写
if(逻辑值){
Code1;
} else {
Code2;
}
练习:获取较大的数
if(逻辑值1){
Code1;
} else if(逻辑值2) {
Code2;
} else {
Code3;
}
练习:输入月份,输出季节---3-5---Spring,6-8-Summer,9-11-Autumn,12-2-Winter
选择结构
switch(表达式){
case 情况1 : Code1;break;
case 情况2 : Code2;break;
……
default:Code;break;
}
注意:
1.表达式的结果是byte/short/int/char
2.从JDK1.7开始,允许匹配字符串
3.从JDK1.5开始,允许匹配枚举常量
4.当选项后边都有break的时候,选项之间的顺序没有影响;如果有一个或者以上选项之后没有break,从匹配到该选项的地方开始执行,知道遇到break或者{}结束
int i = 0;
switch(i){
case 0: int j = 0;
case 1: j+=1;
case 2: j+= 2;
case 3:j+=3;
default:j+=4;
}
System.out.printlnt(j);---报错
练习:从控制台输入两个数字以及运算符号(+、-、*、/),将两个数字按照指定的运算进行并输出结果
循环结构
while(逻辑值){
Code;
}
循环的要素:定义循环变量、控制判断条件、改变循环变量
例子:
1.求1到任意一个数的和
2. 输入任意一个整数,输出这个整数的位数
练习:
- 输入一个整数,求各位数字之和
1 Scanner scanner=new Scanner(System.in); 2 String string=scanner.nextLine(); 3 int sum=0; 4 for (int i = 0; i < string.length(); i++) { 5 sum+=Integer.valueOf(String.valueOf(string.charAt(i))); 6 } 7 System.out.println(sum);
- 求300以内7的倍数
for (int i = 0; i < 300; i++) {
if (i%7==0) {
System.out.println(i);
}
}
- 输入一个整数,转化成二进制显示
1 Scanner scanner=new Scanner(System.in); 2 3 int a=scanner.nextInt(); 4 5 String nbInteger= Integer.toBinaryString(a); 6 7 System.out.println(nbInteger);
如果while循环的代码块只有一句,{}可以省略
do{
Code;
} while(逻辑值);
do-while循环的代码块至少执行一次
for(定义循环变量; 控制判断条件; 改变循环变量){
代码块;
}
练习:求500以内6的倍数的和
for循环的循环变量在循环结束之后不可使用,while循环可以
当循环的次数固定或者步长固定建议使用for循环
当循环次数不定或者变化不规律的时候建议使用while
//希望用户输入一个偶数
Scanner s = new Scanner(System.in);
int even = s.nextInt();
while(even % 2 != 0){
even = s.nextInt();
}
for(;even % 2 != 0; ){
even = s.nextInt();
}
练习:打印九九乘法表
1 for (int i = 1; i <=9; i++) { 2 3 for (int j = 1; j <= i; j++) { 4 5 System.out.print(j+"*"+i+"="+i*j+"\t"); 6 7 } 8 9 System.out.println(""); 10 11 }
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9