目录
一、switch分支结构
在 java 中,只要是有值返回,就是一个表达式
一、基本语法
例子:
/*
请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
a 表示星期一,b 表示星期二 …
韩顺平学 循序渐进学 Java 零基础
第 106页
根据用户的输入显示相应的信息.要求使用 switch 语句完成
*/
import java.util.Scanner;
public class Switch01{
//
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个字符(a-g)");
char c1 = myScanner.next().charAt(0);
switch(c1){
case 'a':
System.out.println("今天是星期一");
break;
case 'b':
System.out.println("今天是星期二");
break;
case 'c':
System.out.println("今天是星期三");
break;
case 'd':
System.out.println("今天是星期四");
break;
case 'e':
System.out.println("今天是星期五");
break;
case 'f':
System.out.println("今天是星期六");
break;
case 'g':
System.out.println("今天是星期天");
break;
default:
System.out.println("你输入的字符错误,找不到对应的日期");
break;
}
}
}
二、流程图
如果没有break语句,下一步不进行判断,直接执行语句块
三、switch细节
1)表达式的数据类型要和后面常量类型一致,或者是可以相互转换的类型,如果表达式是String型,常量是char型,两者无法自动转换,编译就会报错
2)switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum(枚举),String)
3)case子句中的值必须是常量或者常量表达式,不能是变量,比如char c1 ='a',只能是case 'a',而不能是case c1
4)default子句是可选的,当没有匹配的case时执行default子句,也可以没有default子句,则不输出
5)break代表跳出switch,结束这个switch,并不代表结束这个程序
如果没有break语句,程序会执行到switch结尾(不会进行判断,直接输出)
作业心得对学生成绩大于 60 分的,输出"合格"。低于 60 分的,输出"不合格"。(注:输入的成绩不能大于 100),在做这道题时没有考虑到强制类型转换,直接将分数这个double型变量定义成了int型
int c1 = (int)(score/60);//涉及到编程思想
练习题根据月份判断季节,提示说可以使用switch里的穿透功能,由于理解错误,在写代码时出现了以下错误,
错误代码
case 3:
System.out.println("您输入的3月份是春季");
case 4:
System.out.println("您输入的4月份是春季");
case 5:
System.out.println("您输入的5月份是春季");
break;
导致输入3月就会三个语句全部都打印出来
正确代码
case 3:
case 4:
case 5:
System.out.println("您输入的月份是春季");
break;
四、switch和if的比较
1) 如果 判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可以使用,建议使用 swtich 语句。(比如男女,星期,月份)
2) 其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广
二、 for 循环控制(!!!)
非常重要
一、for四要素
: (1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
循环操作 , 这里可以有多条语句,也就是我们要循环执行的代码
当循环条件为假时,执行退出for循环的操作,程序还是会运行,并不是退出程序运行
二、执行流程图
三、for循环语句细节
1) 循环条件是返回一个布尔值的表达式,比如for(int i=1;i<=10;i++)中i<=10,就是返回一个true或者false,
2) for(;循环判断条件;) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。
int i = 1;
for(;i <= 10;){//如果把i=1写在此处,
//i只能在循环语句内使用
//循环条件还是在两个分号中间
System.out.println("青锋所向便是乱世的对错"+i);
i++;
}
System.out.println("i="+i);
3) 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
int count = 3;
for(int i1 = 0,j1 = 0; i1 < count; i1++,j1 += 2){
System.out.println("i1=" + i1 + " j1=" + j1);
}
ctrl+d退出死循环
四、练习题(编程思想)
编程思想:1.化繁为简,将复杂的问题简单化;2.先死后活 : 先考虑固定的值,然后转成可以灵活变化的值
练习题1
打印 1~100 之间所有是 9 的倍数的整数,统计个数及总和
代码如下
public class ForExercise{
public static void main(String[] args){
//1) 打印 1~100 之间所有是 9 的倍数的整数,统计个数及总和
//思路:1.先输出1-100,2.输出1-100内的所有9的倍数
//3.定义变量count,count++统计9的倍数出现的次数
//4.定义变量sum,sum++统计9的倍数的和
int count = 0;
int sum = 0;
for(int i=1; i<=100; i++){
if(i % 9 == 0){
System.out.println("i=" + i);//输出1-100范围内是9的倍数的整数
count++;
sum+=i;
}//一定要加大括号,不然if分支控制只执行第一行语句
}
System.out.println("count=" + count);
System.out.println("sum=" +sum);
}
}
灵活运用:加入变量,可更改变量数据(打印 10~600 之间所有是 5 的倍数的整数,统计个数及总和)
public class ForExercise{
public static void main(String[] args){
int count = 0;
int sum = 0;
int start = 10;
int end = 600;
int t = 5;//10到600之间所有5的的倍数的整数,统计个数及总和
for(int i = start; i<=end; i++){
if(i % t == 0){
System.out.println("i=" + i);//输出1-100范围内是9的倍数的整数
count++;
sum+=i;
}
}
System.out.println("count=" + count);
System.out.println("sum=" +sum);
}
}
也可以通过Scanner语句,通过键盘输入数据来运行程序,可以求任意整数区间内是任意整数的倍数的整数,以及其个数、和
import java.util.Scanner;
public class ForExercise{
public static void main(String[] args){
int count = 0;
int sum = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入计算的区间范围");
int start = sc.nextInt();
int end = sc.nextInt();
System.out.println("输入要被整除的数");//没找到恰当的数据;
int t = sc.nextInt();
for(int i = start; i<=end; i++){
if(i % t == 0){
System.out.println("i=" + i);//输出1-100范围内是9的倍数的整数
count++;
sum+=i;
}
}
System.out.println("count=" + count);
System.out.println("sum=" +sum);
}
}
完成此图片中表达式的输出
1)先用for循环输出0~5;
2)i+(5-i) = 5;//化繁为简
3)将5替换成n,则可灵活运用
public class ForExercise02{
public static void main(String[] args){
for(int i = 0; i <= 5; i++){
System.out.println(i + "+" + (5-i) + "=" + 5 );
}
}
}
定义变量n,可替换成任何整数;
Scanner语句
import java.util.Scanner;
public class ForExercise02{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字");
int n = sc.nextInt();
for(int i = 0; i <= n; i++){
System.out.println(i + "+" + (n-i) + "=" + n );
}
}
}
public class ForExercise02{
public static void main(String[] args){
int n = 10;
for(int i = 0; i <= n; i++){
System.out.println(i + "+" + (n-i) + "=" + n );
}
}
}