day_04《Think in Java》读书笔记(控制执行流程)
java中保留goto关键字,但没有经典goto那么好用,在处理特殊问题的时候可以使用;
4.1 true和false
条件表达式常用;
int a=1;
if(a!=0){
//code;
}else{
//大部分公司规范要求有if必须有else,无论是否有语句需要执行;
}
4.2 if-else
条件语句:
//基本形式
public class IfDemo01{
static int result=0;
static void guess(int guessNum,int target){
if (guessNum>target)
result=+1;
else if (guessNum<target)
result=-1;
else
result=0;
}
public static void main(String[] args) {
guess(2,1);
System.out.println(result);
guess(1,2);
System.out.println(result);
guess(0,0);
System.out.println(result);
}
}
//1
//-1
//0
//项目常方式:与花括号一起使用,形成嵌套判断,如果单层判断条件过多,则使用switch语句
4.3 迭代(循环)
//基本形式
while (boolean-expression)
//statement;
//新判断boolean-expression的值,如果为真执行statement; 直到布尔表达式为假,循环结束;
//样例
public class WhileDemo{
static boolean condtion(){
boolean result = Math.random()<0.99;
System.out.println(result+",");
return result;
}
public static void main(String[] args) {
while (condtion())
System.out.println("这个结果小于0.99'while'");
System.out.println("这个结果大于等于0.99,退出'while'");
}
}
//true,
//这个结果小于0.99'while'
//true,
//这个结果小于0.99'while'
//......
//false,
//这个结果大于等于0.99,退出'while'
4.3.1 do-while
//基本形式
do
//statement;
while (boolean-expression);
//statement语句至少执行一次(相比之下while更加常用)
4.3.2 for
//基本形式
for (initialization;boolean-expression;step)
//statement;
//执行顺序initialization-->boolean-expression-->statement-->step(步进、迭代)
public class ForDemo00{
public static void main(String[] args) {
for (char x=0;x<128;x++)
if (Character.isLowerCase(x))
System.out.print(x);
}
}
//打印出a~z所有小写字母
4.3.3 逗号操作符
public class ForDemo01{
public static void main(String[] args) {
for (int i=1,j=i+5;i<3;i++,j=i*2){
System.out.println(i+"\t"+j);
}
}
}
//1 6
//2 4
4.4 foreach语法
//基本形式
public class ForeachDemo{
public static void main(String[] args) {
Random random = new Random(47);
float f[]=new float[3];
for (int i = 0;i<3;i++)
f[i]=random.nextFloat();
for (float x:f)
//使用x作为一个容器去便利f[]里的所有元素,并输出
System.out.println(x);
}
}
//输出三个随机数
4.5 return
一个方法返回什么值;
退出当前方法,并返回那个值;
//改写IfDemo01
public class IfDemo02{
static int guess(int guessNum,int target){
if (guessNum>target)
return +1;
else if (guessNum<target)
return -1;
return 0;
}
public static void main(String[] args) {
System.out.println(guess(2,1));
System.out.println(guess(1,2));
System.out.println(guess(0,0));
}
}
//1
//-1
//0
4.6 break和continue
- 在循环控制语句的循环体中,可以使用continue语句,表示不再继续循环体后面的代码,继续下一次循环;
- 可以使用break语句,表示终止当前循环,跳出循环体;
- 可以在for、while、do前用合法标识符加标号,用continue/break 标号;语句继续指定的循环;
1)一般的continue会退回最内层循环的开头(顶部),并继续执行。
2)带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环。
3)一般的break会中断并跳出当前循环。
4)带标签的break会中断并跳出标签
//break用法
public class BrakDemo{
public static void main(String[] args) {
loop1: for(int i=0;i<5;i++){
loop2: for(int j=0;j<6;j++){
//当i==j时,终止i循环
if(i==j){
break loop1;
}
System.out.println("i="+i+" j="+j);
}
System.out.println("结束i循环的第"+i+"次循环");
}
System.out.println("结束i循环");
}//结果:结束i循环
}
//countinue用法
public class CountinueDemo01{
public static void main(String[] args) {
loop1:for(int i=0;i<4;i++){
loop2:for(int j=0;j<3;j++){
//当i==j时,继续i循环
if(i==j){
continue loop1;
}
System.out.println("i="+i+" j="+j);
}
System.out.println("结束i循环的第"+i+"次循环");
}
System.out.println("结束i循环");
}
}
//i=1 j=0
//i=2 j=0
//i=2 j=1
//i=3 j=0
//i=3 j=1
//i=3 j=2
//结束i循环的第3次循环
//结束i循环
public class CountinueDemo02{
public static void main(String[] args) {
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
//当i==j时,继续i循环
if(i==j){
continue;
}
System.out.println("i="+i+" j="+j);
}
System.out.println("结束i循环的第"+i+"次循环");
}
System.out.println("结束i循环");
}
}
//i=0 j=1
//结束i循环的第0次循环
//i=1 j=0
//结束i循环的第1次循环
//i=2 j=0
//i=2 j=1
//结束i循环的第2次循环
// 结束i循环
4.7 goto(省省吧,不到非用不可不用)
4.8 switch(选择语句)
public class A{
public static void main(String[] args) {
Random rand = new Random();
for (int i = 0; i < 100; i++) {
//此处产生0~25的随机数,加上'a'(这里涉及到一次隐式转换),就是97~122,转为char类型表示a~z小写字母
int c = rand.nextInt(26)+'a';
System.out.println((char)c +","+c+":");
switch (c){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
System.out.print("vowel");
case 'y':
case 'w':
System.out.print("sometimes a vowel");
break;
default:
System.out.println("consonant");
}
}
}
}
只要有一个入口,就可以执行到最终,或者遇到break语句,如果没有找到,则执行default语句;