Java循环控制
======================================
------------------------------------------------------------------
if
单分支:有不执行情况
if(布尔型表达式){
Java语句;(布尔条件为真,执行,为假不执行)
}
------
双分支:肯定有一个分支执行
if(布尔型表达式){
为真执行的Java语句;
}else{
为假执行的Java语句;
}
------
多分支:一个分支执行,整个流程结束,如果最后以else结尾就一定有一个分支执行,如果以
else if()...结尾,就有不执行情况
if(布尔型表达式){
Java语句;
}else if(布尔型表达式){
Java语句;
}else if()...
---------
public static void main(String[] args) {
boolean isSuccess = false;
if (isSuccess) {
System.out.println("登陆成功");
}
if (isSuccess) {
System.out.println("登陆成功");
}else{
System.out.println("登陆失败1");
}
// 如果分支下只有一条java语句,大括号可以省略
if (isSuccess)
System.out.println("登陆成功");
else
System.out.println("登陆失败2");
}
----------
public static void main(String[] args) {
int a = 24;
int b = 22;
// a>b : 打印1
// a<b : 打印-1
// a==b :打印0
if (a > b) {
System.out.println(1);
} else if (a < b) {
System.out.println(-1);
} else if (a == b) {
System.out.println(0);
}
// 多分支,和多个单分支 有区别,尽管结果一样,效率也有区别
// 单分支,相互不影响,第一个if执行,第二个if也会进行判断
// 多分支,第一个if执行,整个结束(任何一个分支执行,整个结构结束)
}
---------
package javaSE_day08_Text;
import java.util.Scanner;
public class If {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//用的scanner提示输入并获取用户输入
System.out.println("请输入 : \n");
int userInput1 = scanner.nextInt();
int age =userInput1;
if(1<=age&&age<=5){
System.out.println("幼儿");
}else if(6<=age&&age<=18){
System.out.println("少年");
}else if(19<=age&&age<=35){
System.out.println("青年");
}else if(36<=age&&age<=55){
System.out.println("中年");
}else if(56<=age&&age<=100){
System.out.println("老年");
}else{
System.out.println("请输入1-100内的整数");
}//判断属于哪个年龄段
}
}
-------
if 也可以嵌套使用一个条件里还有下级条件的可以再写if啦else if 啥的.
======================================
------------------------------------------------------------------
switch
switch(表达式){ //表达式取值为byte,short,int,char,jdk以后可以是枚举,jdk7以后可以是String
case类型值1: //case 后面跟的是要和表达式比较的值
执行语句1;
bresk;//可以有可以没有表示中断结束用来结束switch语句
case类型值2:
执行语句2;
break;
case类型值3:
执行语句3;
break;
...
default://可以有,可以没有,相当于 else,没有匹配项的时候,执行default处的语句
执行语句n+1;
}
//如果一个case语句体没有break 会发生case穿透现象(本该结束但没有break只能继续往下走结果就是输出一个
本语句体的打印内容还输出了到有break或者其他程序结束命令前的打印语句,同时也就是说相同的只保留case x:
最后一个case写完整就可以简写一个变量对应好几个值的代码)
// switch实现,switch 只能比较相等,而if还可以做范围判断 > < 这些
// 所以 switch能搞定的,if也能搞定,但是if能搞定的,switch不一定可以搞定
// 但是 如果都是要判断相等,使用switch要简单一些
---------------
switch (c) { //首先计算表达式的值
case 'A':
System.out.println("优秀");//依次和case后面的值比较有对应的执行相应语句遇到break结束
break;
case 'B':
System.out.println("良好");
break;
case 'C':
case 'D':
System.out.println("一般");//case穿透
break;
default: //所有case都不匹配执行此语句体,程序结束
System.out.println("差");
break;
}
======================================
-------------------------------------------------------------------
for
1 三要素:初始值,终止条件,步长(都可以不写如for(;;){ }死循环除了循环没有意义)
for (int i=0;i<10;i++){
System.out.println(i);
}
//如果想在循环之外再用到i可以初始化到外边
public static void main(String[]args){
int i = 0;
for (;i<3;i++){
System.out.println("="+i);
}
System.out.println(i);
}
结果是竖着的=0 =1 =2 3
-----------
嵌套式
表示列表
由于这种输出外层循环是行数内层循环是列
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
// print 不换行 println 会换行 xxxxxxxx(五列)
System.out.print(j+" ");//xxxxxxxxx
} xxxxxxxxx(五行)
// 换行
System.out.println();
}
}
-------------
public static void main(String[] args) {
// 9*9表格
// for (int i = 1; i <= 9; i++) {
// for (int j = 1; j <=9; j++) {
// System.out.print(0+" ");
// }
// System.out.println();//9x9的0
// }
// 三角形
// for (int i = 1; i <= 9; i++) {
// for (int j = 1; j <= i; j++) {
// System.out.print(0 + " ");
// }
// System.out.println();
// }
// 数据内容
for (int i = 1; i <= 9; i++) {//每行
for (int j = 1; j <= i; j++) {//每列
System.out.print(j+"x"+i+"="+(j*i) + " ");//显示成乘法口诀
}
System.out.println();
}
}
-----------------
大马中马小马驮砖问题
有100匹马,分别是大马,中马,和小马 ,有100块砖头
大马 一次能驮3块砖
中马 一次能驮2块砖
三匹小马 一次能驮 1块砖
刚好一次驮完,问 有多少大马,多少中马,多少小马(每种马的个数不能为0,并且不能有闲着的马)
注意 : 小马个数 是3的倍数,类型可以使用double
package javaSE_day08_Text;
public class Horse {
public static void main(String[]args){
for(int x=1;x<=100;x++){
for(int y=1;y<=100;y++){
for(int z=1;z<=100;z++){//小马也可以z=3开始三个一增z=z+3
if(3*x+2*y+z/3==100&&x+y+z==100&&(z%3==0)){//z%3==0也可以不写但是要改z的数据类型为double
System.out.println("大马="+x+"中马="+y+"小马="+z);
}
}
}
}
}
}
======================================
------------------------------------------------------------------
while
真假循环,当某个条件为真的时候执行
while(布尔型表达式){
循环体;
}
int a = 2;
while (a > 2) {
System.out.println("=-==");
}//不执行
布尔值表达式为true就执行,一直到false终止
迭代器适合用while
======================================
------------------------------------------------------------------
do...while
先执行一次再判断,保证代码必须执行一次
do{
java 语句;
}while(表达式);
如果条件都是成立的情况下,while,doWhile,for 的执行次数是没有区别的
但是 条件一开始就为false的话,while和for就一次也不执行,但是doWhile 就会执行一次
public static void main(String[] args) {
// while 执行次数 : 0~N次,一开始就不符合条件,导致执行0次, 死循环 执行N次
int a = 2;
while (a > 2) {
System.out.println("=-==");
}
// for 执行次数 : 0~N次,一开始就不符合条件,导致执行0次, 死循环 执行N次
for (int i = 10; i < 10; i++) {
System.out.println(i);
}
do {
// 虽然不符合条件,但是也会执行一次
System.out.println("xxxxx");
} while (a > 2);
}
======================================
------------------------------------------------------------------
跳转语句
break
1 用于switch语句中,结束分支,避免case穿透
2 break也可以用于循环中,终止循环
比如在一堆数据中,循环查找某个数据的时候,当找到之后,就没有必要继续循环查找了,可以使用break终止循环
break 默认终止 距离最近的循环
当break发生在嵌套循环中的时候,默认终止近层循环
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 10; i++) {
count++;
//System.out.println(i);
// 在0~9之间 找5,找到之后 就终止
if (i == 5) {
System.out.println("找到了"+" ^ ^"+"执行了"+count+"次");
break;(有break就结束了,没有就进行到终止条件)
}
if (i == 9) {
System.out.println("结束了"+" ^ ^"+"执行了"+count+"次");
}
}
}
-------------
public static void main(String[] args) {
// for (int i = 0; i < 5; i++) {
// for (int j = 0; j < 5; j++) {
// System.out.print(j + " ");
// if (i == 3) {
// // 只能终止近层循环
// break;
// }
// }
// System.out.println();
// }
outerFor:for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(j + " ");
if (j == 3) {
// 终止指定循环
break outerFor;
}
}
System.out.println();
}
}
--------------------------
contiue
continue : 跳过当前次循环,继续下一次
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
if (i == 3) {
// 跳过当前次,直接执行表达式3,认为循环体已经执行完成
continue;
}
System.out.println(i);
}
}