一.switch语句
1. 语句定义格式:
switch(表达式){ case 常量值1: 语句体1; break; case 常量值2: 语句体2; break; case 常量值3: 语句体3; break; ... default: 语句体n; break; }
2.注意:
(1)表达式的取值:byte,short,int,char
JDK5以后可以是枚举类型
JDK7以后可以是String类型
(2)case后面只能是常量,不能是变量,同一个switch语句中,csae的常量值必须互不相同。
(3)执行流程: 先计算表达式中的结果值,然后拿着这个值自上而下与每一个case后面的常量值进行比较,如果有匹配的值,就执行对应case中的语句体,当遇到break结束整个switch语句。若没有case与之对应匹配的值,就会执行default语句中的语句体,当遇到break就结束整个switch语句。
(4)default不一定要有,如果有程序会更加严谨
(5)default不一定要放在最后,可以放在switch中的任意位置,不影响运行流程
(6)break可以不写,但是可能会发生switch穿透
switch穿透:如果case语句中没有break语句,将继续执行后面case或者default中的语句,直到遇到break语句为止。
3.练习
(1)购买下列饮料,前提,假设带的金额正好是一瓶饮料的价格
可乐 3元 脉动 6元 旺仔 5元 汇源 14元 椰子汁 8元
//案例:购买饮料的案例,前提,假设带的金额正好是一瓶饮料的价格
//可乐 3 脉动 6 旺仔 5 汇源 14 椰子汁 8
Scanner sc = new Scanner(System.in);
System.out.print("请输入饮料的价格:");
int money = sc.nextInt();
switch (money) {
case 3:
System.out.println("购买了一瓶可乐");
break;
case 6:
System.out.println("购买了一瓶脉动");
break;
case 14:
System.out.println("购买了一瓶汇源");
break;
case 5:
System.out.println("购买了一瓶旺仔");
break;
case 8:
System.out.println("购买了一瓶椰子汁");
break;
default:
System.out.println("输入的金额有误");
}
(2)观察下列代码,写出y的值
第一题:
知识点:遇到break就结束整个switch语句
public static void main(String[] args) {
int x = 2;
int y = 3;
switch (x) {
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y=" + y); // 4
}
结果:y=4
第二题:
知识点:switch穿透
public static void main(String[] args) {
int x = 2;
int y = 3;
switch (x) {
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println("y=" + y); // 6
结果:y=6
(3)利用switch穿透简化程序
Scanner sc = new Scanner(System.in);
System.out.println("题目:以下哪一种是关系型数据库?()");
System.out.println("A.redis B.clickhouse C.Mysql D.hbase");
System.out.println("请输入您的选项:");
String choice = sc.next();
switch (choice){
case "A":
case "B":
case "D":
System.out.println("选择错误");
break;
case "C":
System.out.println("选择正确");
}
二.循环结构
1.while循环
1.1 语句定义格式:
语句定义格式: 初始化条件语句; while(判断条件语句){ 循环语句体; 控制条件语句; }
1.2 while循环练习
我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
int high = 884800;
int paperHigh = 1;
int count =0;
while (paperHigh < high) {
count++;
paperHigh = paperHigh * 2;
}
System.out.println(count+"次");
System.out.println(paperHigh*1.0/100+"米");
结果:20次
折叠后纸的厚度为10485.76米
2.for循环
2.1 语句定义格式:
for循环的语句定义格式: for(初始化条件语句;判断条件语句;控制条件语句){ 语句体; }
2.2 for循环注意事项:
1、初始化条件语句只会在循环开始执行一次,后续不执行
2、初始化条件语句可以提前写在for循环外面, 这样作用域在for循环外部也可以使用初始化条件语句定义的变量
3、当for循环中的语句体只有一行的时候,大括号可以省略, 建议不要省略大括号
4、判断条件语句能否不写?可以,但是不写就是无条件执行,会变成死循环
5、最简单的for死循环就是for(;;){...}
2.3for循环练习:
(1)
请在控制台输出数据1-10 请在控制台输出数据10-1 求出1-10之间数据之和 求出1-100之间偶数和 求出1-100之间奇数和 求5的阶乘
// 请在控制台输出数据1-10
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
// 请在控制台输出数据10-1
for (int i = 10; i > 0; i--) {
System.out.println(i);
}
// 求出1-10之间数据之和
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
System.out.println(sum);
// 求出1-100之间偶数和
int ouSum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
ouSum += i;
}
}
System.out.println(ouSum);
// 求出1-100之间奇数和
int jiSum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 != 0) {
jiSum += i;
}
}
System.out.println(jiSum);
//求5的阶乘
int jieCheng=1;
for (int i = 5; i >0; i--) {
jieCheng*=i;
}
System.out.println(jieCheng);
}
}
(2) 在控制台输出所有的”水仙花数”,统计”水仙花数”共有多少个
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。 153 = 1*1*1 + 5*5*5 + 3*3*3
int count = 0;
for (int i = 100; i <= 999; i++) {
if(i==(i/100)*(i/100)*(i/100)+(i%100/10)*(i%100/10)*(i%100/10)+(i%10)*(i%10)*(i%10)){
System.out.println(i);
count++;
}
}
System.out.println("水仙花数有"+count+"个");
结果:
(3)
需求1:请输出一个4行5列的星星(*)图案。 需求2:请输出如下图形 * ** *** **** ***** 需求3:在控制台输出九九乘法表。
//需求1:请输出一个4行5列的星星(*)图案。
for (int j = 1; j <=4; j++) { //控制行数
for (int i = 0; i <5; i++) { //控制列数
System.out.print("*\t"); //print表示在当前行输出
}
System.out.println();
}
/*
需求2:请输出如下图形
*
**
***
****
*****
*/
for (int j = 1; j <= 5; j++) { //控制行数
for (int i = 1; i <= j; i++) { //控制列数
System.out.print("*\t"); //print表示在当前行输出
}
System.out.println();
}
// 需求3:在控制台输出九九乘法表。
for (int j = 1; j <= 9; j++) { //控制行数
for (int i = 1; i <= j; i++) { //控制列数
System.out.print(j + "*" + i + "="+j * i+"\t"); //print表示在当前行输出
}
System.out.println();
}
3.do…while循环语句
语句格式:
4.循环结构总结:
1.for循环适合针对一个范围判断进行操作,while循环适合判断次数不明确操作
2.do…while循环至少会执行一次循环体。
三.跳转控制语句
1.break
2.continue
简而言之:break终止整个循环,continue终止当前循环;
3.return
return: 返回,表示结束整个方法,必须是写在方法的最后一条语句
四.方法
1.语句定义格式以及名词解释
修饰符 返回值类型 方法名(参数类型1 参数名1,参数类型2 参数名2,...){ 方法体; return 返回值; } 名词解释: 修饰符:目前来说,修饰符固定写法 public static 返回值类型:用来限定方法的返回值类型,与return具体返回的值有关 方法名:随便起,要符合标识符命名规则 参数: 两种参数:形参(方法定义时的名字参数),实参(将来调用方法时实际传入的值) 参数类型:基本数据类型或者引用数据类型 参数名:随便起,要符合标识符命名规则 方法体:描述方法要干什么 return:表示结束整个方法,将结果返回给调用者 返回值:方法最终给调用者的结果,类型要与返回值类型有关联 举例:定义一个求两个int数之和的方法 public static int sumTwoNumber(int i1,int i2){ int res = i1+i2; return res; }
2.方法使用过程中的注意事项:
1、方法不能嵌套定义!!方法和方法是平级关系
2、方法不调用,不执行
3、如果一个方法有返回值,将来调用的时候,有两种处理方式:
1)使用一个变量接收方法的返回值 (建议使用)
2)直接使用方法的结果
4、方法定义的时候,如果明确了有返回值类型,方法定义内部必要有一个return返回值
5、java提供了一个关键字void,表示方法没有返回值的类型
举例: public static void fun1() {
System.out.println("今天是一个下雪的天气!");
}
3.方法的重载
方法的重载: 在同一个类中,方法名相同,方法的参数列表(参数的个数,参数类型)不同,与返回值无关的现象,叫做方法的重载.
注意事项: 1. 传参的时候,注意数据类型大小关系
2. 传递时候,根据顺序从左向右传参,顺序不要搞错.
演示:
public static int sum(int a, int b) {
return a + b;
}
public static long sum(int x, long y, int z) {
return x + y + z;
}
public static void main(String[] args) {
//需求1: 求两个数之和
int a = 3;
int b = 4;
System.out.println(sum(a, b));
//需求2: 求三个数之和
int c = 5;
//JVM会根据方法名和参数列表在类中查找对应的方法并调用,若没有,则报错
System.out.println(sum(a, b, c));
long b1 = 10L;
System.out.println(sum(a, b1, c));
小练习:
(1)键盘录入两个数据,返回两个数中的较大值
//键盘录入两个数据,返回两个数中的较大值
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a = sc.nextInt();
System.out.println("请输入第二个数据:");
int b = sc.nextInt();
compare(a, b);
}
public static void compare(int a, int b) {
if (a > b) {
System.out.println("最大值为" + a);
} else {
System.out.println("最大值为" + b);
}
}
(2)键盘录入行数和列数,输出对应的星形
//键盘录入行数和列数,输出对应的星形
Scanner sc = new Scanner(System.in);
System.out.println("请输入行数:");
int a = sc.nextInt();
System.out.println("请输入列数:");
int b = sc.nextInt();
printStar(a, b);
}
public static void printStar(int row, int col) {
for (int i = 0; i < row; i++) { //控制行数
for (int j = 0; j < col; j++) { //控制列数
System.out.print("*\t");
}
System.out.println();
}
}