目录
逻辑控制语句
if判断语句
"()"中为逻辑表达式,如果为真则执行"{}"中的程序
if(布尔表达式){
布尔表达式为真执行的语句;
}
if(布尔表达式){
布尔表达式为真执行的语句;
}else{
布尔表达式为假执行的语句;
}
if(布尔表达式1){
布尔表达式1为真执行的语句;
}else if(布尔表达式2){
布尔表达式2为真执行的语句;
}else{
布尔表达式1和2都为假执行的语句;
}
布尔表达式就是返回true或false的语句;如:a > b
示例
int a = 10;
int b = 15;
//-- 返回a和b之间较大的一个数
// 用三元表达式来实现
System.out.println(a > b ? a : b);
//-- if判断实现
if(a > b){
System.out.println(a);
}else{
System.out.println(b);
}
int c = 10;
//-- 返回a、b、c之间最大的一个数
if(a > b && a > c){
System.out.println(a);
}else if(b > a && b > c){
System.out.println(b);
}else{
System.out.println(c);
}
嵌套的if语句
所谓嵌套,就是if语句的花括号内还有另一个if语句:按以上的示例,我们用嵌套的if语句来返回a、b、c之间最大的一个数
int a= 10;
int b = 15;
int c = 10;
//-- 返回a、b、c之间最大的一个数
if(a > b){
if(a > c){
System.out.println(a);
}else{
System.out.println(c);
}
}else{// b > a
if(b > c){
System.out.println(b);
}else{
System.out.println(c);
}
}
注:以上你会发现,同一个需要,嵌套的if语句代码量大很多,而且容易出错,而且代码可读性差,所以我们在正常开发的过程中应尽量避免采用嵌套if语句。
switch语句
switch(变量) //只能为 5种类型:byte, short, int, enum、String(1.7+)
//变量只能为 5种类型:byte, short, int, enum、String(1.7+)
switch(变量) {
case 常量1:
//待执行的代码;
break;
case 常量2:
//待执行的代码;
break;
case 常量3:
//待执行的代码;
break;
default: //待执行的代码;
}
// 虽然 case语句中的 break是可选的,但在绝大多数情况下如果没有 break,程序的逻 辑就会发生错误
// 因此,通常情况下都需要加上 break
// 执行时,如果变量的值与常量1相等,执行待执行的代码,然后break;
/*
这里的break可以理解为停止执行switch语句,直接执行switch语句之后的代码,如果没有break,即便变量的值不等于常量2,常量2的待执行代码也会执行。(后续我们通过实例来具体说明)
*/
/**
如有一个班的学生成绩,需要给每个学生的成绩打等级
90以上:A+,80~90:A,[70,80):B,[60,70):C,60以下:D......
*/
int x = 90;
// 用if判断打印出成绩对应的等级
if(90 <= x && x <= 100){
System.out.println("A+");
}else if(x >= 80 && x < 90){
System.out.println("A");
}else if(x >= 70 && x < 80){
System.out.println("B");
}else if(x >= 60 && x < 70){
System.out.println("C");
}else if(x < 60 && x >= 0){
System.out.println("D");
}else{
System.out.println("异常数据");
}
// 用switch语句实现通过等级打印出成绩区间
String d = "B";//-- char d = 'A+'
switch(d){
case "A+" :
System.out.println("成绩在90分以上");
break;
case "A" :
System.out.println("成绩在80~90分");
break;
case "B" :
System.out.println("成绩在70~80分");
break;
case "C" :
System.out.println("成绩在60~70分");
break;
case "D" :
System.out.println("成绩在60分以下");
break;
default :
System.out.println("没有对应的成绩段");
}
注:请自行试试,把常量B及以下的所有语句的break删除,看看打印结果。
循环控制语句
while 循环语句
// 当布尔表达式为真,则执行待执行的代码,如果一直为真则一直执行。
while(布尔表达式){
//待执行的代码;
}
// 一直执行就是死循环,我们在开发中不允许死循环,所以while循环中不允许直接使用常量true
while(true){
}
// 所以while循环的布尔表达式一般是带变量的逻辑运算或者就是个布尔变量,变量的值会根据循环的执行次数而改变
打印1~100的数
int a = 1;
while (a <= 100){
System.out.println(a++);
}
// a是变量,在布尔表达式中,循环体重a有变化(a++)
以上程序打印出来,每个数字都换了行,如果不想换行怎么办?
int a = 1;
while (a <= 100){
System.out.print(a++);
}
// System.out.print打印不换行和System.out.println打印后换行
以上程序打印出来的数字都是连着的不想连着怎么办?
int a = 1;
while (a <= 100){
System.out.print(" " + a++);
}
// 每打印一个数字加个空格
现在是隔开了,但都在一行,我想每行只显示10个数怎么办?
int a = 1;
while (a <= 100){
if(a % 10 == 0){
System.out.println(" " + a++);
}else{
System.out.print(" " + a++);
}
}
// 在循环中常常加上if语句来进行判断执行
现在也换行了,但是好些数字没有对齐怎么办?
int a = 1;
while (a <= 100){
if(a % 10 == 0){
System.out.println(a++ + "\t");
}else{
System.out.print(a++ + "\t");
}
}
// \t制表符,不同于空格,键盘的tab键,我们敲的代码换行缩进等都用这个制表符,才好对齐代码
另一种写法
int a = 1;
while (a <= 100) {
System.out.print(a % 10 == 0 ? (a++ + "\t\n") : (a++ + "\t"));
}
// 我们用三元表达式将代码简化了,但可读性也差了些,在实际使用中过于复杂的判断还是不要使用三元表达式
// \n是换行的意思,用于相当于 System.out.println();
do..while
do{
//待执行的代码;
}while(布尔表达式);
//注意末尾的分号
do...while语句先执行待执行的代码,然后判断布尔表达式,如果表达式为假则停止执行,如果为真则继续执行。
请大家把上面的while语句的示例用do...while写出来
do...while和while的区别
- do...while在判断之前执行,而while是先判断后执行
- 当布尔表达式一直为假时,do...while语句至少会执行一次待执行代码,而while不会执行
for循环(使用最多的一种循环)
for(变量初始化; 条件判断; 步进){
//待执行的代码
}
//注意for括弧中的分号
for循环的执行过程:
- 1). 执行变量初始化。
- 2). 执行条件判断。如果条件判断结果为假,那么退出 for 循环,开始执行循环后面的 代码;如果条件判断为真,执行 for循环里面的代码。
- 3). 执行步进。(i++、i--、i+=7...),注意步进不是只能为1
- 4). 重复步骤2。
打印1~100的数,每行10个数
for(int i = 1; i <= 100; i++){
System.out.print(i % 10 == 0 ? (i + "\t\n") : (i + "\t"));
}
以上为标准写法,下面来几个特殊写法(了解即可--奇葩的面试题或考试题中会出现,实际实现中要少用,除非迫不得已)
// 步进的代码写在循环体中
for(int i = 1; i <= 100; ){
System.out.print(i % 10 == 0 ? (i + "\t\n") : (i + "\t"));
i++;
}
// 执行变量初始化放在循环体外
int i = 1;
for( ; i <= 100 ; ){
System.out.print(i % 10 == 0 ? (i + "\t\n") : (i + "\t"));
i++;
}
// 注:无论表达式如何放,for()括号中的两个英文分号不能少
// 没有条件判断表达式
int i = 1;
for( ; ; ){
System.out.print(i % 10 == 0 ? (i + "\t\n") : (i + "\t"));
i++;
}
// 这是死循环,会一直执行下去
示例:打印1~100之间的偶数,每10个数换行
for(int i = 2; i <= 100; i+=2){
System.out.print(i % 20 == 0 ? (i + "\t\n") : (i + "\t"));
}
注:
- 从2开头每打印一次加2,那么每次打印的就是偶数
- 每10个数换行为啥要模20呢?因为2~10中间只有5个偶数,2~20之间才是10个偶数。
循环嵌套
使用循环语句打印出如下五行五列的结果
第1行第1列 第1行第2列 第1行第3列 第1行第4列 第1行第5列
第2行第1列 第2行第2列 第2行第3列 第2行第4列 第2行第5列
第3行第1列 第3行第2列 第3行第3列 第3行第4列 第3行第5列
第4行第1列 第4行第2列 第4行第3列 第4行第4列 第4行第5列
第5行第1列 第5行第2列 第5行第3列 第5行第4列 第5行第5列
for(int i = 1; i <= 5; i++){
for(int j = 1; j <= 5; j++){
System.out.print("第"+i+"行第"+j+"列\t");
}
System.out.println();
}
我们把外层循环 i 看做行,内层循环 j 看做列,打印的结果就是一个平面这样就好理解双重循环了。那么问题来了,双重循环都来了,三重循环呢?可以用同样的方式去理解,三重循环就是空间立体的x、y、z数轴。我们在日常开发中遇到三重循环的地方比较少,大部分是双重循环。除非做算法之类的,否则很少用到三重循环。
循环中的控制
- break语句:经常用在循环语句中,用于跳出整个循环,执行循环后面的代码。但是break只能跳出当前循环。
// 在数组[1,5,2,8,0,9]中查找数字8
int[] arr = {1,5,2,8,0,9};
for(int i = 0; i < 6; i++){
if(arr[i] == 8){
System.out.println(arr[i]);
break;
}
}
// 变量arr是一个数组,我们将在下一章讲解
// break跳出当前循环,break后不在验证布尔表达式i<6直接结束当前循环
- continue语句:经常用在循环语句中,用于跳出当前的这个循环(或者是跳出本次循环), 开始下一次循环的执行。
// 在数组[1,5,2,8,0,9]中查找数字8、0、9
int[] arr = {1,5,2,8,0,9};
for(int i = 0; i < 6; i++){
if(arr[i] != 8 || arr[i] != 0 || arr[i] != 9){
continue;
}
System.out.println(arr[i]);
}
// 在一次循环中,循环体中continue;之后的语句将不会执行,直接进入下一次循环
- 跳出多重循环,使用标号:aa: for(..){ for(..){ break aa; } }
如上面的打印五行五列,就像教室里的座位一样,最后一排有可能没有5列,比如最后一排只有3列,我们该如何打印?
aa:for(int i = 1; i <= 5; i++){
for(int j = 1; j <= 5; j++){
System.out.print("第"+i+"行第"+j+"列\t");
if(i == 5 && j == 3){// 打印了第5行第3列就结束
break aa;
}
}
System.out.println();
}
上一篇:005-Java运算符
下一篇:007-Java数组