流程控制语句笔记
在项目里面,功能结构的实现有2中方式: 顺序结构 分支结构
分支结构
条件结构: 条件判断结构 条件选择结构
循环结构:
1. 条件判断结构
1.1 if…else (区间判断)
语法:
if(条件表达式 boolean){==> true
//代码块
}[else{
//代码块
}]
//判断一个学生成绩 >90 给与奖励
//动态录入学生相关的信息
int score = 99;
if(score>=90){
System.out.println("优秀,给与奖励");
}else{
System.out.println("一般");
}
1.2 if…elseif…else
语法: 有且只执行一个if
if(){
}else if(表达式){
}
....n个
else{
}
if(score>=90){
System.out.println("优秀");
}else if(score>=80){
System.out.println("良好");
}else if(score>=60 ){
System.out.println("中等");
}else{
System.out.println("差");
}
1.3 if…else 嵌套
1.4 Scanner
动态读取在控制台录入的数据。 jdk提供一个工具类。 java.util.Scanner
导包: 导入==(import)==类/接口等所在位置。
public static void main(String[] args) {
//动态录入学生相关的信息
//数据都是不同数据类型的
//1.创建Scanner的变量(键盘录入的变量)
Scanner input = new Scanner(System.in);// alt+enter
//2.使用变量读取录入的不同类型的数据
System.out.println("请录入学生的姓名:");
// String stuName = input.next();
String stuName = input.nextLine();
System.out.println("请录入"+stuName+"的年龄:");
int stuAge = input.nextInt();//阻塞
System.out.println("请录入"+stuName+"的成绩:");
double stuScore = input.nextDouble();
System.out.println("stuAge:"+stuAge);
System.out.println("stuScore:"+stuScore);
}
public static void main(String[] args) {
//1.创建Scanner的变量(键盘录入的变量)
Scanner input = new Scanner(System.in);// alt+enter
//2.使用变量读取录入的不同类型的数据
System.out.println("请录入学生的姓名:");
// String stuName = input.next();
//next() nextInt() nextDouble() 只能读取空格之前的内容 光标依然在空格之后
String stuName = input.nextLine();// 读取一整行的数据 并换行
System.out.println(stuName);
// int str = input.nextInt();// 规定我们必须录入整数的数据
// System.out.println(str);//读取光标之后的数据 Exception in thread "main" java.util.InputMismatchException (运行时异常)
}
2. 条件选择结构 switch(等值判断)
switch(表达式){==>结果的数据类型: byte short int char String(JDK1.7) enum(枚举)
case 值1:
//逻辑
[break;//结束(跳出)switch语句]
case 值2:
//逻辑
[break;]
....
[ default:
//逻辑
break;
]
}
public static void main(String[] args) {
//通过月份求出季节
Scanner input = new Scanner(System.in);
System.out.println("请录入月份(1-12):");
String month1 = input.nextLine();
switch (month) {
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("录入的数据有误");
break;
}
}
//字符串相互比较
public static void main(String[] args) {
String username ="admin";//常量池内存的地址值 123
String str1 = new String("abc");//37632
Scanner input = new Scanner(System.in);
System.out.println("请录入用户名:");
String name = input.nextLine();//堆
//判断录入的用户名是否是一致的
System.out.println("name:"+name);
//字符串之间的比较使用equals 是String类里面的功能
if (username.equals(name) ) {// == 地址值不一样
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
}
3. 循环结构
3.1 while
while(循环条件){
//循环体
}
//避免出现死循环 一定要有结束循环的条件
//输出10次“循环”
int num = 1;
while(num<=10){
System.out.println("循环"+num);
//修改num变量的数据
num++;//num = num+1;
}
public static void main(String[] args) {
//用户执行登录 用户名完全匹配的时候
//失败 让用户多次去执行登录的功能
String username ="admin";
Scanner input = new Scanner(System.in);
//循环体 循环条件 结束循环的条件
String name = "";//不能初始化给null
while(true) {//NPE java.lang.NullPointerException 肯定是某个变量的数据为null(引用数据类型)
System.out.println("请录入用户名:");
name = input.nextLine();
if (!name.equals(username)) {
System.out.println("登录失败,请重新登录!");
}else{
System.out.println("登录成功了!欢迎你:"+name);
//循环结束了
//控制循环流程 break
break;//结束循环
}
}
3.2 do…while
do{
//循环体
}while(循环条件);
Scanner input = new Scanner(System.in);
//使用 do...while实现
String answer;
do{
System.out.println("韩梅梅,怎么样,可以了吗y/n");
answer= input.nextLine();//赋值
if("y".equals(answer)){
break;
}
System.out.println("早上5点练声,上午练钢琴,下午到声乐老师家练习唱歌,晚上练习舞蹈基本功");
}while("n".equals(answer));//扩大answer变量的作用域
//无论是否满足循环条件 至少会执行一次循环体 优先选择while
System.out.println("很棒!");
3.3 while 案例
//动态录入班级人数和学员成绩,计算班级学员的平均成绩
Scanner input = new Scanner(System.in);
System.out.println("动态录入班级人数:");
int studentNum = input.nextInt();
int count = 1;
double sum = 0;
while(count<=studentNum){
System.out.println("请录入第"+count+"个学员的成绩:");
int score = input.nextInt();
sum+=score;
count++;
}
double avg = sum/studentNum;
System.out.println("班级学员的平均成绩:"+avg);
//2019年苹果手机售出10万,每年增长45%,请问按此增长速度,到哪一年苹果手机的出货量将达到100万
int year = 2019;
int sale = 100000;
do{
//每年增长45%
sale+=sale*0.45;
year++;
}while(sale<=1000000);
System.out.println("到"+year+"苹果手机的出货量将达到100万"+sale);
3.4 for(优先使用)
for([表达式1];循环条件;[表达式3]){
//循环体
}
表达式1: 初始化变量 有且只运行一次
表达式3: 动态修改变量的数据
int count = 1,num=100;
for (;count<=10;count++){
System.out.println("我喜欢java"+count);
}
System.out.println(count);
3.5 for循环嵌套
打印一个: 九九乘法表
// for (int i = 1; i <= 9; i++) {
// //打印输出每一行的内容
// for (int j = 1; j <= i; j++) {
// System.out.print(j+"*"+i+" = "+(j*i)+"\t");
// }
// System.out.println();//换行
// }
3.6 关键字
1. break
必须与switch与循环语句进行结合使用。 遇见break,结束(跳出)switch或者循环语句
2. continue
只能运用在循环语句: 跳过本次循环 继续执行剩下的循环
3. return 返回
可以使用在程序的任意地方 遇见return 整个逻辑(方法)就结束
return;
return 数据; 方法