JavaSE第三天(循环&条件判断)
1、Scanner类的使用
// 1. 导包
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
// 2. 使用 new 关键字创建 Scanner 对象
// 创建对象需要传入 监听键盘 的流输入对象
// 语法格式:引用类型 变量名 = new 引用类型(入参);
Scanner sc = new Scanner(System.in);
// 3. 调用对象的方法
// 监听键盘,必须输入 String 类型的数据
// 定义变量接收监听键盘的结果
String result = scan.next();
System.out.println("result = " + result);
// 调用键盘必须输入整数的方法
int i = scan.nextInt();
System.out.println("i = " + i);
/*
使用完毕需要关闭资源,因为创建Scanner对象时需要传入一个标准的输入流
只要涉及到流的操作都需要释放资源,否则,这个资源就得被JVM垃圾回收,去回收,否则程序无法结束
*/
sc.close();
}
}
注意next()和nextLine()方法的区别:next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
2、Math的简单使用
public class Demo02 {
// 入口方法
public static void main(String[] args) {
// 求绝对值 abs();
int result = Math.abs(-5);
System.out.println("result = " + result);
// 平方根 Math.sqrt();
System.out.println(Math.sqrt(2));
// 四舍五入函数
System.out.println(Math.round(1.5));
// 向下取整
System.out.println(Math.floor(1.9));
// 向上取整
System.out.println(Math.ceil(1.1));
}
}
Math类中拥有许多关于数学方面的运算,如有需要其他的运算,可以查询官方API
3、if的使用
分类
- 单分支
public class Demo05 {
public static void main(String[] args) {
// 单分支
int point = 99;// 基本类型变量
/*
如果 if (条件表达式 结果是 true 则执行) {
执行这里的代码
}
*/
if (point == 100) {
System.out.println("带去公园玩耍!");
}
}
}
- 双分支
/*
双分支
*/
public class Demo06 {
public static void main(String[] args) {
int score = 90;//定义分数为90
// 如果小明考试 100 分 去公园玩耍
if (score == 100) {
System.out.println("对小明的奖励:去公园玩耍。");
} else {
System.out.println("对小明的惩罚:在家写作业。");
}
}
}
- 多分枝
/*
多分支
*/
public class Demo07 {
public static void main(String[] args) {
int score;// 声明一个分数的变量
Scanner scan = new Scanner(System.in);
System.out.println("请输入考试成绩,返回评定结果:");
score = scan.nextInt();
// 根据输入的成绩判断返回哪个评定结果
if (score >= 90) {
System.out.println("该学生的成绩评定为:优秀");
} else if (score >= 80 && score <= 89) {
System.out.println("该学生的成绩评定为:良好");
} else if (score >= 70 && score <= 79) {
System.out.println("该学生的成绩评定为:中等");
} else if (score >= 60 && score <= 69) {
System.out.println("该学生的成绩评定为:普通");
} else {
System.out.println("还需要继续努力。");
}
}
}
总结:if条件判断,判断条件大部分都是boolean类型,如果条件判断过多,可以考虑使用switch,像上面的判定成绩就可以考虑使用 switch,而且过多的if else语句也不利于阅读,再加上每次判断都是从头开始判断,如果只有最后一个else判断成功,则会浪费很多资源。所以建议,[1,5]区间之内的条件判断使用if,多于5次条件判断以上的使用switch
4、switch语句
格式:
switch (表达式) {
case 值1:
语句体;
break;
case 值2:
语句体;
break;
case 值3:
语句体;
break;
default:
语句体;
}
注意如果没有break,会出现case穿透
case穿透:当条件表达式匹配与某一个case的值时会执行 该case对应的语句体,如果此时这个语句体没有break则会一直往下执行,直至default执行完毕。
public class Demo08 {
public static void main(String[] args) {
/*
100 / 10 = 10
90 ~ 99 / 10 = 9
80 ~ 89 / 10 = 8
70 ~ 79 / 10 = 7
60 ~ 69 / 10 = 6
*/
int score;// 声明一个分数的变量
Scanner scan = new Scanner(System.in);
System.out.println("请输入考试成绩,返回评定结果:");
score = scan.nextInt();
// case 穿透?break 防止 case 穿透
// 重复的业务逻辑
switch (score / 10) {
case 10:
case 9:
System.out.println("该学生的成绩评定为:优秀");
break;
case 8:
System.out.println("该学生的成绩评定为:良好");
break;
case 7:
System.out.println("该学生的成绩评定为:中等");
break;
case 6:
System.out.println("该学生的成绩评定为:普通");
break;
default:
System.out.println("还需要继续努力。");
}
}
}
该代码就是利用了case穿透的作用,把原本需要重复写的代码减少,阅读性也增加了。
5、while循环
作用:循环即重复地执行一些相同或类似的操作
while(条件){
循环体
迭代因子
}
可以理解为重复执行的if,当条件成立时,执行大括号里面的内容,但是这个里面的内容一定要有改变条件的迭代因子,否则会出现死循环,当内容执行完成会再次进行判断,成立则执行内容,否则跳出循环
int row = 1;//默认从1开始,因为时九九乘法表所以最大值为9
int cell= 1;//打印内容的次数跟随着行号的变化而变化,第一行,打印内容的次数一定等于1,第二行,打印内容的次数一定等于2 。。。
while(row<=9){//控制打印9行
//开始打印
System.out.print(cell+"*"+row+"="+cell*row+"\t");
//打印完成判断,是否需要换行,判定依据为:我在这一行打印内容的次数是由等于这一行的行数
if(cell == row){//如果相等说明需要换行
//换行
System.out.println();
//准备打印下一行的数据
//下一行,行号++
row++;
//数据开始也是从1开始,那么打印的次数也需要归为1
cell=1;
}else{
//如果不是相等,说明这一行还有内容需要打印,则打印次数++
cell++;
}
}
以while打印99乘法表为例子这里的迭代因子一定时改变row,因为外部定了row是1,不改变则永远都是1,条件永远都为true,这里在cell等于row的时候进行++在原来的基础上+1
6、for循环
作用与while循环相同,只是while循环的它擅长于不知道需要循环多少次,只知道达到什么样的状态我就停止,而for则擅长我知道遍历循环多少次,也是一个比较灵活的循环
结构
for(①初始条件表达式;②布尔表达式;④迭代因子){
③循环体
}
这里初始条件表达式在整个循环中只执行一次,下一步,进入布尔条件表达式,如果表达式成立则进入循环体中 ,执行完成,开始迭代因子,接着继续判断布尔条件表达式,成立继续循环,后面就都是这样,
int row = 1;//默认从1开始,因为时九九乘法表所以最大值为9
int cell= 1;//打印内容的次数跟随着行号的变化而变化,第一行,打印内容的次数一定等于1,第二行,打印内容的次数一定等于2 。。。
for(;row<=9;cell++){
//打印
System.out.print(cell+"*"+row+"="+cell*row+"\t");
//判断
if(cell == row){
System.out.println();
row++;
cell=1;
}
}
这里实现的功能的思想和前面while一直,只不过这里迭代因子不是在循环体里面了,而是在for的小括号里面
7、循环嵌套
多层循环嵌套使用使用业务需求
// 需求:输出5行5列的矩形 '*'
for (int i = 0; i < 5; i++) {// 操作行数
for (int j = 0; j < 5; j++) {// 操作个数
System.out.print("*");
}
System.out.println();// 换行
}
总结:多层循环中,真正的核心代码就是最内层循环内所写的代码,而外层循环只是辅助内层循环进行处理的,这里,单看内层循环只是在一行内打印5个*,但是需求是打印多行,我们可以在外层循环控制打印的行数,来赋值内层循环 进行打印。