一.分支语句
- if语句:
if 、if-else、if-else-if:可以处理一切分支判断。
格式:1) if(判断条件){
执行操作; //当判断条件为true时 才执行
}
2) if(判断条件)){
执行操作;
}else{
方法体;
}
3) if(判断条件)){
执行操作;
}else if(判断条件2)){
执行操作;
}else{
...
}
// 判断一个数是否为奇数 Scanner scanner = new Scanner(System.in); System.out.println("请输入一个非0数字"); int num = scanner.nextInt(); if (num % 2 == 1) { System.out.println("您输入的数是奇数"); } else { System.out.println("您输入的数是偶数"); }
//判断字符串的方式 // 使用equals()方法判断字符串是否相等 不可用 == // !str.equals() String str = "张三"; if (str.equals("张三")) { System.out.println("恭喜你说对了"); } else { System.out.println("说错了"); }
/* 需求 * 用户输入一个年份 判断该年是否是闰年 * 闰年判断: 可以被4整除但不能被100整除 可以被400整除 * 若为闰年则输出该年为闰年 否则输出 平年 */ Scanner scanner = new Scanner(System.in); System.out.println("请输入一个年份"); int years = scanner.nextInt(); if (years % 4 == 0 && years % 100 != 0 || years % 400 == 0) { System.out.println(years + "年是闰年"); } else { System.out.println(years + "年是平年"); }
注意: 逻辑判断 无论逻辑又多么复杂 结果只有两只情况 true/false
2. switch语句:
格式: switch(常量){
case 常量1:
执行操作;
break;
case 常量2:
执行操作;
break;
….
}
import java.util.Scanner; public class Test2 { public static void main(String[] args) { //输入年份和月份,输出该月的天数 (使用switch case语句) //再输入日期 判断该日期是该年的第多少天? Scanner scanner = new Scanner(System.in); System.out.println("请输入年份"); int year = scanner.nextInt(); System.out.println("请输入月份"); int month = scanner.nextInt(); System.out.println("请输入日期"); int day = scanner.nextInt(); boolean isLeapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0; int days = 0; switch (month) { case 12: days += 30; case 11: days += 31; case 10: days += 30; case 9: days += 31; case 8: days += 31; case 7: days += 30; case 6: days += 31; case 5: days += 30; case 4: days += 31; case 3: int day1 = isLeapYear ? 29 : 28; days += day1; case 2: days += 31; case 1: days += day; System.out.println(year + "年" + month + "月" + day + "日是该年的第" + days + "天"); break; default: System.out.println("您输入的月份有错误,请重新输入"); break; }
注意事项:
break 代表跳出关键字 只要遇见了break 就会停止执行该代码块(switch{})
switch case 语句限制条件:
只能判断 byte short int 字符串 字符 包装类 枚举类
不能判断 boolean型 long型
不能对某一范围进行判断 必须是具体的内容
swtich-case:若case中无符合的数,并且default写在最前(无break时),则为顺序执行,有break或 } 则退出。
swtich-case:若case中无符合的数,并且default写在最后,则执行default。
swtich-case:若case中有符合的数,并且default写在最后,并且default前面的case没有break时,default也会执行。
二. 循环控制语句
①for:最常用,用在与次数有关的循环处理,甚至只用for可以解决任何循环问题。
注意事项:for中定义的用于控制次数的循环变量,只在for中有效,for结束则循环变量被释放(回收)。
语法:
1. for(循环变量初始化;循环条件;自增/自减){
代码块;
}
2. 循环嵌套
or(循环变量初始化;循环条件;自增/自减){
执行语句1;
for(循环变量初始化;循环条件;自增/自减){
执行语句2;
}
}
/** *1. 有1,2,3,4四个数字,问这4个数字能组成多少个互不相同且无数字重复的三位数?都是多少? * 2.一个数如果恰好等于它的因子之和,这个数就成为”完数”.例如 6 = 1 + 2 + 3,找出1000以内的所有完数. */ 1. public class HW1 { public static void main(String[] args) { int c = 0 ; for (int i = 1; i < 5; i++) { for (int i1 = 1; i1 < 5; i1++) { for (int i2 = 1; i2 < 5; i2++) { if ( i2 != i1 && i2 != i && i1 != i){ System.out.println("这样的三位数有: " + i + i1 + i2); c ++ ; } } } } System.out.println("共有 " + c + " 个这样的数”); 2. for (int i = 1; i < 1000; i++) { int sum = 0; for (int i1 = 1; i1 < i; i1++) { if (i%i1==0){ sum += i1; } } if (sum==i){ System.out.println("完数有:" + i); } } } }
②while:很常用,用在循环时候要先检查循环条件再处理循环体,用在与次数无关的情况。如果不能明确结束条件的时候,先使用while(true),在适当条件使用if语句加break结束循环。
while(条件){
执行代码
}
*当条件为true时执行{}里面的内容
*当条件为false时 跳出循环
* 注意:
必须要有 条件为false的情况 否则就是死循环
死循环可用 break 跳出循环
// 斐波那切数列 public class HW3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入需要几个斐波那契数"); int n = scanner.nextInt(); long prev = 1; long next = 1; long accumulate = 0; int i=0; System.out.print(prev + " "); System.out.print(next + " "); while (i<n-2) { accumulate = prev + next; prev = next; next = accumulate; System.out.print(accumulate + " "); i++; } } }
③do-while:在循环最后判断是否结束的循环。如:使用while(true) 实现循环的时候,结束条件break在while循环体的最后,就可以使用 do-while 。do-while 的结束条件经常是“否定逻辑条件”,不便于思考业务逻辑,使用的时候需要注意。可以利用while(true)+ break 替换。
* do while循环
语法:
do{
代码块
}while(条件);
while 先执行判断条件 在执行代码块里的内容
do...while 先执行一次代码块里的内容 在判断条件 无论条件是否满足
//水仙花数 public class HW1 { public static void main(String[] args) { //找出100~1000之间的水仙花数 //水仙花数 abc = a^3 + b^3 + c^3 int num = 100; while (num < 1000) { int a = num/100; int b = num%100/10; int c = num%10; if (num == (a * a * a + b * b * b + c * c * c)) { System.out.println(num + " 是水仙花数"); } num++; } } }
④循环三要素:A.循环变量初值 B.循环条件 C.循环变量增量(是循环趋于结束的表达式)
⑤for和while循环体中仅一条语句,也要补全{ },当有多条语句,且不写{ }时,它们只执行紧跟着的第一条语句。
⑥循环的替换:
while(布尔表达式){} 等价 for(;布尔表达式;){}
while(true){} 等价 for(;;)
while(true){} + break 替换 do{}while(布尔表达式);
for(;;) + break 替换 do{}while(布尔表达式);
三.跳转控制语句
continue:退出本次循环,直接执行下一次循环
break:退出所有循环