Java 学习 Day04

程序流程控制


一、分支结构中的if-else(条件判断结构)

1.三种结构

第一种:
if(条件表达式){
执行表达式
}

第二种:二选一
if(条件表达式){
执行表达式1
}else{
执行表达式2
}

第三种:n选一
if(条件表达式){
执行表达式1
}else if(条件表达式){
执行表达式2
}else if(条件表达式){
执行表达式3
}

else{
执行表达式n
}

*/
class IfTest {public static void main(String[] args) {//举例1int heartBeats = 79;if(heartBeats < 60 || heartBeats > 100){System.out.println("需要做进一步检查");}System.out.println("检查结束");//举例2int age = 23;if(age < 18){System.out.println("你还可以看动画片");}else{System.out.println("你可以看成人电影了");}//举例3if(age < 0){System.out.println("您输入的数据非法");}else if(age < 18){System.out.println("青少年时期");}else if(age < 35){System.out.println("青壮年时期");}else if(age < 60){System.out.println("中年时期");}else if(age < 120){System.out.println("老年时期");}else{System.out.println("你是要成仙啊~~");}}
}

二、如何从键盘获取不同类型的变量:需要使用Scanner类

具体实现步骤:
1.导包:impor java.util.Scanner;
2.Scanner的实例化:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量

注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException
导致程序终止。

//1.导包:import java.util.Scanner;
import java.util.Scanner;class ScannerTest {public static void main(String[] args) {//2.Scanner实例化Scanner scan = new Scanner(System.in);//3.调用Scanner类的相关方法System.out.println("请输入你的姓名:");String name = scan.next();System.out.println(name);System.out.println("请输入你的年龄:");int age = scan.nextInt();System.out.println(age);System.out.println("请输入你的体重:");double weight = scan.nextDouble();System.out.println(weight);System.out.println("你相中我了吗?(true/false)");boolean isLove = scan.nextBoolean();System.out.println(isLove);//对于char型的获取,Scanner没有提供的相关的方法。只能获取一个字符串System.out.println("请输入你的性别:(男/女)");String gender = scan.next();char genderChar = gender.charAt(0);//获取索引为0位置上的字符System.out.println(genderChar);}
}

练习一
岳晓鹏参加java考试,他和父亲达成承诺:
如果:
成绩为100分,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone12;
当成绩为[60,80]时,奖励一个ipad;
其它时,什么奖励也没有。
请从键盘输入岳晓鹏的期末成绩,并加以判断

说明:
1.else 结构是可选的。
2.针对条件表达式:
①如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
②如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
③如果多个条件表达式有包含关系。通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没有机会执行了。

import java.util.Scanner;
class IfTest1 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入岳晓鹏的期末考试成绩:(0-100)");int score = scan.nextInt();if(score == 100){System.out.println("奖励一台BMW");}else if(score > 80 && score <= 99){System.out.println("奖励一台iphone12");}else if(score >=60 && score <=80){System.out.println("奖励一个 iPad");}else{System.out.println("什么奖励也没有");}}
}

练习二
编写程序:由键盘输入三个整数,分别存入变量num1,num2,num3,
对它们进行排序(使用 if-else if-else),并且从小到大输出。

说明:
①if-else结构是可以相互嵌套的。
②如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。

import java.util.Scanner;
class IfTest2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入第一个整数:");int num1 = scanner.nextInt();System.out.println("请输入第二个整数:");int num2 = scanner.nextInt();System.out.println("请输入第三个整数:");int num3 = scanner.nextInt();if(num1 >= num2){if(num2 >= num3){System.out.println(num3 + "," + num2 + "," + num1);}else if (num3 >= num1){System.out.println(num2 + "," + num1 + "," + num3);}else{System.out.println(num2 + "," + num3 + "," + num1);}}else{if(num2 >= num1){if(num3 >=num2){System.out.println(num1 + "," + num2 + "," + num3);} else if (num1 >= num3){System.out.println(num3 + "," + num1 + "," + num2);}else {System.out.println(num1 + "," + num3 + "," + num2);}}}}
}

练习三
5岁的狗相当于人类多大呢?其实,狗的前两年每一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗 相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人
类的年龄。如果用户输入负数,请显示一个提示信息。

import java.util.Scanner;
class IfTest3 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入狗狗的年龄:(0-10)");int dogAge = scan.nextInt();if(dogAge <0){System.out.println("狗狗还没出生呢~~");}else if(dogAge <= 2){System.out.println("狗狗的年龄为:" + dogAge * 10.5  );}else if(dogAge > 2 && dogAge <= 10){System.out.println("狗狗的年龄为:" + 2 * 10.5 + (dogAge - 2) * 4); }else{System.out.println("狗狗成精了!!" ); }}
}

练习四
如何获取一个随机数:10 - 99
说明:
Math.random获取的随机数的区间为[0.0 , 1.0),现在要获取[10 , 99]的随机数,可运用公式:[a,b] : (int)(Math.random() * (b - a + 1) )+ a

class  MathRandom
{public static void main(String[] args) {int value = (int)(Math.random() * (99 - 10 + 1) + 10);System.out.println(value);}
}

练习五
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:
高:180cm以上;富:财富一千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足比下有余。”
如果三个条件都不满足,则:“不嫁!”

import java.util.Scanner;
class IfTest4 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入您的身高:(cm)");double height = scan.nextDouble();System.out.println("请输入您的财富:(千万)");double wealth = scan.nextDouble();/*//方式1System.out.println("请输入您是否帅:(true/false)");boolean handsome = scan.nextBoolean();if(height >= 180 && wealth >= 1 && handsome){System.out.println("我一定要嫁给他!!!");}else if(height >= 180 || wealth >= 1 || handsome){System.out.println("嫁吧,比上不足比下有余。");}else{System.out.println("不嫁!");}*///方式2System.out.println("请输入你是否帅:(是/否)");String handsome = scan.next();if(height >= 180 && wealth >= 1 && handsome.equals("是")){System.out.println("我一定要嫁给他!!!");}else if(height >= 180 || wealth >= 1 || handsome.equals("是")){System.out.println("嫁吧,比上不足比下有余。");}else{System.out.println("不嫁!");}}
}

三、For循环结构的使用

1.循环结构的四个要素
①初始化条件
②循环条件 —>是boolean类型
③循环体
④迭代条件

2.for循环的结构
for(①;②;④){

}
执行过程:① - ② - ③ - ④ - ② - ③ - ④… -②

class  ForTest{public static void main(String[] args) {for(int i = 0;i < 5;i++);{System.out.println("Hello World!");}//i:在for循环内有效,出了for循环就失效了//System.out.println(i);//练习int num = 1;for(System.out.println('a');num <= 3;System.out.println('c'),num++){System.out.println('b');}//输出结果:abcbcbc}
}

练习一
遍历100以内的偶数,输出所有偶数的和,输出偶数的个数

class  ForTest{public static void main(String[] args) {int sum = 0;int count = 0;for(int i = 1;i <=100;i++){if(i % 2 == 0){sum += i;count++;}}System.out.println("总和为:" + sum);System.out.println("个数为:" + count);}
}

练习二
编写程序:
从1循环到150,并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。

class ForTest1 {public static void main(String[] args) {/*//错误,如果同时是3,5,7的倍数这种情况没有考虑for(int i = 1;i <=150;i++){if(i % 3 ==0){System.out.println(i + "foo");}else if(i % 5 == 0){System.out.println(i + "biz");}else if(i % 7 == 0){System.out.println(i + "baz");}else{System.out.println(i);}}*/for(int i = 1;i <=150;i++){System.out.print(i + " ");if(i % 3 == 0){System.out.print("foo ");}if(i % 5 == 0){System.out.print("biz ");}if(i % 7 == 0){System.out.print("baz ");}//换行System.out.println();}}
}

练习三
输入两个正整数m和n,求其最大公约数和最小公倍数。
比如:12和20的最大公约数是4,最小公倍数是60。

说明:break关键字的使用:一旦在循环中执行到break,就跳出循环

import java.util.Scanner;
class ForTest {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入正整数m:");int m = scan.nextInt();System.out.println("请输入正整数n:");int n = scan.nextInt();//获取最大公约数//1.获取两个数中的最小值int min = (m <= n)? m : n;//2.遍历for(int i = min;i >= 1;i--){if(m % i ==0 && n % i ==0){System.out.println("最大公约数是:" + i);break;//一旦在循环中执行到break,就跳出循环}}//获取最小公倍数//1.获取两个数中的最大值int max = (m >= n)? m : n;//2.遍历for(int i = max;i <= m * n;i++){if(i % m ==0 && i % n ==0){System.out.println("最小公倍数为:" + i);break;}}}
}

四、分支结构:switch-case

1.格式
switch(表达式){
case 常量1:
执行语句1;
//break;

case 常量2:
执行语句2;
//break;

default:
执行语句n;
//break;

}

2.说明:
①根据switch表达式中的值,依次匹配case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。
当调用完执行语句之后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构
末尾结束为止。

②break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。

③switch结构中的表达式,只能是如下的6种数据类型之一:
byte,short,char,int,枚举类型(JDK5.0新增),string(JDK7.0新增)

④case之后只能声明常量,不能声明范围。

⑤break关键字是可选的。

⑥default:相当于if-else结构中的else。
default结构是可选的。而且位置是灵活的。

class SwitchCaseTest {public static void main(String[] args) {int number = 5;switch(number){case 0:System.out.println("zero");break;case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("other");break;}//**************如下的两种情况都编译不通过*********************//情况一/*boolean isHandsome = true;switch(isHandsome){case true:System.out.println("我好帅啊~~~");break;case false:System.out.println("我好丑啊~~~");break;default:System.out.println("输入有误~~~");}*///情况二/*int age = 10;switch(age){case age > 18:System.out.println("成年了");break;default:System.out.println("未成年");}*/}
}

练习一
对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。

class SwitchCaseTest1 {public static void main(String[] args) {int score = 78;switch (score / 10){case 1:case 2:case 3:case 4:case 5:System.out.println("不合格");break;case 6:case 7:case 8:case 9:case 10:System.out.println("合格");break;}//更优的解决方案switch (score / 60){case 0:System.out.println("不及格");break;case 1:System.out.println("及格");break;}}
}

练习二
编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。

2 15: 31 + 15

5 7: 31 + 28 + 31 + 30 + 7

说明:break在switch-case中是可选的

import java.util.Scanner;
class SwitchCaseTest2 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入2019年的month:");int month = scan.nextInt();System.out.println("请输入2019年的day:");int day = scan.nextInt();//定义一个变量保存总天数int sumDay = 0;/*//方式1 冗余if (month == 1){sumDay = day;}else if(month == 2){sumDay = 31 + day;}else if(month == 3){sumDay = 31 + 28 + day}//...else(month == 12){sumDay = ... + day;}*///方式二 冗余/*switch (month){case 1:sumDay = day;break;case 2:sumDay = 31 + day;break;case 3:sumDay = 31 + 28 + day;break;//...case 12:sumDay = ... + day;break;}*///方式三switch(month){case 12:sumDay += 30;case 11:sumDay += 31;case 10:sumDay += 30;case 9:sumDay += 31;case 8:sumDay += 31;case 7:sumDay += 30;case 6:sumDay += 31;case 5:sumDay += 30;case 4:sumDay += 31;case 3:sumDay += 28;case 2:sumDay += 31;case 1:sumDay += day;}System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDay + "天");}
}

练习三
从键盘分别输入年、月、日,判断这一天是当年的第几天

注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除

2)可以被400整除

说明:

  1. 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
  2. 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。
import java.util.Scanner;
class SwitchCaseTest3
{public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入year:");int year = scan.nextInt();System.out.println("请输入month:");int month = scan.nextInt();System.out.println("请输入day:");int day = scan.nextInt();int sumDay = 0;/*//方式1 冗余if((year % 4 == 0 && year % 100 !=0) || year % 400 == 0){switch(month){case 12:sumDay += 30;case 11:sumDay += 31;case 10:sumDay += 30;case 9:sumDay += 31;case 8:sumDay += 31;case 7:sumDay += 30;case 6:sumDay += 31;case 5:sumDay += 30;case 4:sumDay += 31;case 3:sumDay += 29;case 2:sumDay += 31;case 1:sumDay += day;}}else{switch(month){case 12:sumDay += 30;case 11:sumDay += 31;case 10:sumDay += 30;case 9:sumDay += 31;case 8:sumDay += 31;case 7:sumDay += 30;case 6:sumDay += 31;case 5:sumDay += 30;case 4:sumDay += 31;case 3:sumDay += 28;case 2:sumDay += 31;case 1:sumDay += day;}}System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDay + "天");*///方式二switch(month){case 12:sumDay += 30;case 11:sumDay += 31;case 10:sumDay += 30;case 9:sumDay += 31;case 8:sumDay += 31;case 7:sumDay += 30;case 6:sumDay += 31;case 5:sumDay += 30;case 4:sumDay += 31;case 3:if((year % 4 == 0 && year % 100 !=0) || year % 400 == 0){sumDay += 28;}else{sumDay += 29;}case 2:sumDay += 31;case 1:sumDay += day;}System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDay + "天");}
}

五、while循环的使用

1.循环结构的四个要素
①初始化条件
②循环条件 —>是boolean类型
③循环体
④迭代条件

2.while循环的结构


while(②){
③;
④;
}

执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ② - ③ - ④ - … - ②

说明:
1.写while循环千万小心不要丢了迭代条件。一旦丢了,就可能导致死循环!
2.我们写程序,要避免出现死循环。
3.for循环和while循环是可以相互转换的!
区别:for循环和while循环的初始化条件部分的作用范围不同。

算法:有限性。

练习一
遍历100以内的所有偶数

class WhileTest {public static void main(String[] args) {//遍历100以内的所有偶数int i = 1;while(i <= 100){if(i % 2 == 0){System.out.println(i);}i++;}//出了while循环以后,仍可以调用。System.out.println(i);//101}
}

六、do-while循环的使用

1.循环结构的4个要素
①初始化条件
②循环条件 -->是boolean类型
③循环体
④迭代条件

2.do-while循环结构


do{
③;
④;
}while(②);

循环过程:① - ③ - ④ - ② - ③ - ④ - ② - ③ - ④ -… - ②

说明:
1.do-while循环至少会执行一次循环体!
2.开发中,使用for和while更多一些。较少使用do-while

练习一
遍历100以内的偶数,并计算所有偶数的和及偶数的个数

class DoWhileTest {public static void main(String[] args) {//遍历100以内的偶数,并计算所有偶数的和及偶数的个数int sum = 0;int count = 0;int i = 0;do{if(i % 2 == 0){System.out.println(i);sum += i;count++; }i++;}while(i <= 100);System.out.println("总和为:" + sum);System.out.println("个数为:" + count);}
}

练习二
题目:
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。

说明:

  1. 不在循环条件部分限制次数的结构:for(;

    Java 学习 Day04(1)相关推荐

    1. Java学习总结与体会,从小菜开始

      文章目录 1.Java学习总结 一.第一章 1.Java技术体系平台 2.Java的重要的特点 3.跨平台性的原理 4.什么是JDK,什么是JRE? 5.编写最简单的java代码(hello,worl ...

    2. Java学习 第十五天

      Java学习 第十五天 第一章 StringBuilder类 1.1 字符串的不可变 1.2 StringBuilder概述 1.3 构造方法 1.4 两个常用方法 1.4.1 append方法 1. ...

    3. Java学习路线图,如何学习Java事半功倍?

      作为一个初学者想掌握Java并不是很容易,Java本身是具有一定难度的,虽然说兴趣这东西可以让我们学习不累,但是有多少人学习是因为兴趣,或者有多少人知道自己的兴趣在哪?所以我很明确的告诉你学习这事本来 ...

    4. Java学习必不可少的网站,快收藏起来

      java技术在IT互联网行业的发展前景一直在提升,越来越多的人都在学习java技术,今天小编来给大家提供一些学习Java的网站集合,希望能够帮助到正在学习java技术的同学. Java学习必不可少的网 ...

    5. 分享五款java学习辅助工具,总有你用的上的~

      想要学好java技术,除了自身的努力,辅助工具也不缺少,辅助工具可以帮助大家在今后的工作中可以提高工作效率,下面小编就来分享五款java学习辅助工具,总有你用的上的~ 五款java学习辅助工具: 1. ...

    6. Java学习从入门到精通的学习建议

      想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此.如:基础语法.核心类库.面向对象编程.异常.集合.IO流等基础如果学不好,那么后边更深入的语法也不容易学会. ...

    7. java学习笔记11--Annotation

      java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

    8. java学习笔记13--反射机制与动态代理

      本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

    9. JAVA学习资源网站

      中文java技术网--http://www.cn-java.com/ 灰狐动力(http://www.huihoo.com/)-- 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...

    最新文章

    1. integer加1_AP双语数学常用的术语(1)
    2. 基于javafx的五子棋_JavaFX中基于表达式的PathTransitions
    3. 亲测有效!解决macOS Big Sur系统Parallels Desktop 16的USB无法使用和无法联网问题
    4. 分子动力学模拟软件_分子模拟软件Discovery Studio教程(十三):构建PLS模型(3D-QSAR)...
    5. OpenShift 4 - 用CA证书或Token访问Internal Registry中的容器
    6. 日报管理系统_好车日报:通用电动车无线电池管理系统;8月皮卡增长39.8%
    7. Android 中Touch(触屏)事件传递机制
    8. Atitit usrQC27模块化的规范模块化法 v4 t77 目录 1. 模块化层级(软件项目 1 1.1. 子项目》命名空间package机制》类》类文件》方法函数级别》语句 1 2. 常见的
    9. 一些开源的IOS项目(wifi扫描 条形码扫描 tcp/ip 等等)
    10. abb机器人伺服电机报闸是什么_ABB机器人伺服电机刹车失灵,抱闸卡死维修
    11. 碳足迹计算器ios版总结
    12. 身份证男女识别---进一步优化03
    13. 图灵奖得主(麦卡锡\霍尔)
    14. j2cache两级缓存框架
    15. CSGO 增加机器人数量上限
    16. 正则表达式 ---判断非空
    17. 啥?以后找工作面试求职者的将不是人!那是啥?道翰天琼认知智能机器人平台API接口为您揭秘。
    18. HTML+CSS聚光灯效果动画
    19. 【机器学习】详解 转置卷积 (Transpose Convolution)
    20. 计算机芯片记忆方法,神奇的万能记忆芯片作文

    热门文章

    1. 最小均方误差和最小二乘法的关系
    2. 防腐材料生产销售类织梦网站模板
    3. python github api_用python写一个GitHub Trending Api
    4. JavaWeb第七次:编程题(购物车+登录员工之窗+表格排版/留言板)
    5. java控制台输出版多人聊天室
    6. Canvas清除画布clearRect非常容易踩坑的点
    7. “唯芯片论”不可取,手机竞争背后仍是产业链博弈
    8. 2022年终总结, 2023 年度规划
    9. 视频号文案你学会了吗?视频号十万+的文案全在这里:国仁楠哥
    10. 孙溟㠭先生书法艺术——“求”