1.顺序结构
2.选择结构
格式解释:
switch关键字:表示这是一个switch语句
switch后的表达式:表示选择条件
case语句:每个case 语句表示一个分支
beak语句:表示结束switch语句
default语句:表示当所有其他的case的分支,都不能匹配switch后表达式的值的时候,此时就会执行default分支。
注意事项:
switch语句后,表达式结果的取值范围?
case 后的常量取值?
break可以省略吗?
default可以省略吗?
switch语句的结束条件
switch表示这是switch语句
表达式的取值:byte, short, int, char
JDK5以后可以是:枚举
JDK7以后可以是:String
选择结构有两种实现方式,这两种实现方式,各自适用于什么样的使用场景呢?
if的使用场景
针对结果是boolean类型的判断
分支对应多个表达式的多个取值
switch的使用场景
针对结果是固定类型的判断
表达式的取值范围只是固定的离散值集合,分支对应表达式的某一种取值
if的使用场景
针对结果是boolean类型的判断 if(true)
分支对应多个表达式的多个取值
switch的使用场景
针对结果是固定类型的判断 switch(byte,short,int,char,String)
表达式的取值范围只是固定的离散值集合,分支对应表达式的某一种取值
/**
* case穿越
*
*/
public class NewDemo {
public static void main(String[] args) {
int month = 4;
//通过switch
switch (month) {
case 1:
case 2:
case 3:
System.out.println("第一季度");
break;
case 4:
case 5:
case 6:
System.out.println("第二季度");
break;
case 7:
case 8:
case 9:
System.out.println("第三季度");
break;
case 10:
case 11:
case 12:
System.out.println("第四季度");
break;
default:
System.out.println("输入有误");
break;
}
}
}
3.循环结构
while循环语句格式:
初始化语句;
while (条件判断语句) {
循环体语句(包含条件控制语句);
}
执行流程:
和for循环一模一样
联系:
for循环和while循环的联系
for循环和while循环几乎可以在任何场景下,作等价替换
for循环和while循环的区别
直观来说,for循环适合针对一个范围判断进行操作(循环次
数比较明确),while循环适合判断次数不明确操作
}
/**
* 一般情况下来说,我们不希望程序有死循环,尤其是生产环境,你搞出一个死循环,是一个严重的错误
* 但是死循环还是有自己独到的用处
* 测试的时候还是很好用
*
* 怎么写会死循环?
* while(true)
* for(;;)
*
*/
public class Demo {
public static void main(String[] args) {
//页面进行交互
//数据传过来了
//用Scanner来模拟页面传给我们的数据
while(true){
Scanner sc = new Scanner(System.in);
System.out.println("页面传来的数据是: ");
int a = sc.nextInt();
}
//业务逻辑
}
4.跳转控制语句
跳转控制语句:在循环执行过程中,控制(终止)循环的执行
1. break;
2. continue;
3. return;
return 关键字不是为了跳转出循环体 不管有多少层循环嵌套,直接全部终止掉
更常用的功能是结束一个方法(函数),也就是退出一个方法。
跳转到上层调用的方法。这个在方法的使用那里会在详细的讲解。
//return 终止单重循环
//for (int i = 1; i <= 10; i++) {
// System.out.println(i);
// if(i == 5) {
// return;
// }
//}
//return 终止多重循环
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if( j == 2) {
return;
}
System.out.println("i = " + i + " -- " + "j = " + j);
}
}
5.运算符优先级
6.相关题目
- 小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,她都 会花去6元钱,请问,至少经过多少天,小芳才可以存到100元钱。
- 写一个方法,判断一个数(int类型)是否是素数
- 正整数n若是它平方数的尾部,则称n为同构数,比如5是55=25右边的数,25是2525=625右边的数
求1-99范围内的所有同构数
4.水仙花数
/**
* - 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身
* - 举例:153就是一个水仙花数,153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 1 + 125 + 27 = 153
*
* 水仙花数也称之为 自恋数
*
* 分析:
* 初始化语句 int i = 100;
* 条件判断语句 i<=999/i<1000
* 问题:找到一个三位数的百位 十位 个位都是多少
* 个位:153 = 150 + 3 i % 10
* 十位:153 想办法把十位的数字变成个位的 i/10 %10
* 百位:153 i/100
*
*/
public class Demo3 {
public static void main(String[] args) {
int count = 0;
for (int i = 100; i <= 999; i++) {
//1,取个位数
int ones = i % 10;
//2,取十位数
int tens = (i / 10) % 10;
//3,取百位数
int hundreds = (i / 100) % 10;
//数都拿到了 开始判断
boolean flag = (Math.pow(ones, 3)) + (Math.pow(tens, 3)) + (Math.pow(hundreds, 3)) == i;
if (flag) {
System.out.println(i);
count++;
}
}
System.out.println("水仙花数一共有:" + count + "个");
}
}
/**
* while改写水仙花数
*
*
*/
public class Demo2 {
public static void main(String[] args) {
System.out.println("使用for循环计算水仙花数");
int count = 0;
for (int i = 100; i <= 999; i++) {
//1,取个位数
int ones = i % 10;
//2,取十位数
int tens = (i / 10) % 10;
//3,取百位数
int hundreds = (i / 100) % 10;
//数都拿到了 开始判断
boolean flag = (Math.pow(ones, 3)) + (Math.pow(tens, 3)) + (Math.pow(hundreds, 3)) == i;
if (flag) {
System.out.println(i);
count++;
}
}
System.out.println("水仙花数一共有:" + count + "个");
System.out.println("---------------------------------------");
System.out.println("使用while循环计算水仙花数");
int i = 100;
int count2 = 0;
while (i <= 999) {
//1,取个位数
int ones = i % 10;
//2,取十位数
int tens = (i / 10) % 10;
//3,取百位数
int hundreds = (i / 100) % 10;
//数都拿到了 开始判断
boolean flag = (Math.pow(ones, 3)) + (Math.pow(tens, 3)) + (Math.pow(hundreds, 3)) == i;
if (flag) {
System.out.println(i);
count2++;
}
//循环控制语句
i++;
}
System.out.println(count2);
}
}
/**
* - 比较while和for的循环控制变量
*
* - 珠峰的高度是8848m,假设有一张足够大可折叠的纸张,初始厚度是0.01m,
* - 求解这张纸折叠多少次,纸张的厚度开始超过珠峰?
*
* 0.01m = 1cm
* 8848 = 884800cm
* 假设我用for循运算
*
*
*
*/
public class Demo3 {
public static void main(String[] args) {
int high = 1;
int maxHigh = 884800;
int count = 0;
while (high < maxHigh) {
//模拟折叠
high = high * 2;
count++;
System.out.println(high);
}
System.out.println("需要折叠: " + count);
System.out.println("----------------------");
int count2 = 0;
for (int i = 1; i < 884800; i *= 2) {
count2++;
}
System.out.println(count2);
}
}