Java基础编程之分支结构和循环结构
知识点1:分支结构1:if-else
/*
一、流程控制分为三类结构:顺序结构、分支结构、循环结构
二、分支结构1:if-else
1.格式1:
if(条件表达式){
执行语句1;
}
2.格式2:“二选一”
if(条件表达式){
执行语句1;
}else{
执行语句2;
}
3.格式3:“多选一”
if(条件表达式1){
执行语句1;
}else if(条件表达式2){
执行语句2;
}else if(条件表达式3){
执行语句3;
}
....
else{
执行语句2;
}
*/
class IfTest {
public static void main(String[] args) {
int heartBeats = 80;
if(heartBeats < 60 || heartBeats > 100){
System.out.println("你需要做进一步的检查");
}
System.out.println("体检结束");
int age = 23;
if(age >= 22){
System.out.println("你已经到了合法的结婚年龄");
}else{
System.out.println("你只能先谈谈恋爱~~");
}
int myAge = 12;
if(myAge < 0 || myAge > 150){
System.out.println("你输入的数据不合法~~");
}else if(myAge < 6){
System.out.println("婴幼儿时期");
}else if(myAge < 25){
System.out.println("青少年时期");
}else if(myAge < 60){
System.out.println("壮年时期");
}else{
System.out.println("老年时期");
}
System.out.println("执行结束");
}
}
说明1:
如果多个条件表达式彼此之间是“互斥”关系(即:没有交集),则哪个条件表达式声明在上面,哪个条件表达式声明在下面都可以。
如果多个条件表达式彼此之间是“包含”关系,则需要将条件表达式范围小的声明在条件表达式范围大的上面。
说明2:如果if-else结构中的某一个if或else if 或 else只有一行执行语句,则可以省略其一对{}。但是,不建议省略
*/
知识点2:if-else的使用
import java.util.Scanner;
class IfTest {
public static void main(String[] args) {
Scanner scann = new Scanner(System.in);
System.out.println("请输入你的身高(cm):");
int height = scann.nextInt();
System.out.println("请输入你的财富(单位:千万):");
double wealth = scann.nextDouble();
System.out.println("请告诉我,你帅否?(是/否):");
String isHandsome = scann.next();
if(height >= 180 && wealth >= 1 && "是".equals(isHandsome)){
System.out.println("我一定要嫁给他!!!");
}else if(height >= 180 || wealth >= 1 || "是".equals(isHandsome)){
System.out.println("嫁吧,比上不足,比下有余。");
}else{
System.out.println("不嫁!");
}
}
}
知识点3:switch-case的使用
/*
分支结构2:switch-case
switch(表达式){
case 常量1:
执行语句1;
break;
case 常量2:
执行语句2;
break;
case 常量3:
执行语句3;
break;
...
default :
执行语句n;
break;
}
说明:
1. 执行过程:根据switch中表达式的值,依次匹配各个case中的常量。当与某个常量匹配上时,就进入case中,调用其执行语句。
执行完之后,仍然会考虑继续执行其后的case中的结构,直到遇到break关键字或执行完后续的所有的case结构。
2. switch中的表达式可以是如下的类型:byte \ short \ char \ int ; 枚举类(jdk5.0新增) \ String(jdk7.0新增)
3. switch-case结构的局限性:① switch中的表达式有类型的限制 ② 匹配的多个case,通常都不会太多。
4. default相当于if-else结构中的else。
default是可选的,位置也是灵活的。
5. switch-case与if-else的转换:
switch-case结构一定可以改写为if-else;
if-else不一定能改写成switch-case.
建议:在switch-case和if-else都可以使用的场景下,建议大家使用switch-case。因为执行效率稍高
*/
class SwitchCaseTest {
public static void main(String[] args) {
int num = 5;
switch(num){
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;
case 4:
System.out.println("four");
break;
default:
System.out.println("other");
}
String season = "summer";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
}
}
class SwitchCaseTest1{
public static void main(String[] args) {
int score = 78;
if(score < 60){
System.out.println("不及格");
}else{
System.out.println("及格");
}
switch(score / 10){
case 0:
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;
}
}
}
- 如下:switch-case结构中没有break的举例
import java.util.Scanner;
class SwitchCaseTest2{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入当年的month:");
int month = scan.nextInt();
System.out.println("请输入当月的day:");
int day = scan.nextInt();
int sumDays = 0;
switch(month){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
sumDays += 29;
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println(month + "月" + day + "日是2020年的第" + sumDays + "天");
}
}
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 sumDays = 0;
switch(month){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
sumDays += 29;
}else{
sumDays += 28;
}
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println(month + "月" + day + "日是2020年的第" + sumDays + "天");
}
}
知识点4:循环结构1:for
/*
一、凡是循环结构,都有如下的4个要素:
① 初始化条件部分
② 循环条件部分 ---> boolean类型
③ 循环体部分
④ 迭代部分
二、for循环结构
for(①;②;④){
③
}
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ② - ... - ②
*/
class ForTest {
public static void main(String[] args) {
for(int i = 1;i <= 5;i++){
System.out.println("Hello World!");
}
int sum = 0;
int count = 0;
for(int i = 0;i <= 100;i++){
if(i % 2 == 0){
System.out.println(i);
sum += i;
count++;
}
}
System.out.println("总和为:" + sum);
System.out.println("偶数的个数为:" + count);
}
}
/*
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
比如:12和20的最大公约数是4,最小公倍数是60。
说明:break关键字的使用
1. 总结:结束循环的方式都有哪些呢?
方式1:循环条件不满足,返回false
方式2:在循环结构中,使用break关键字跳出循环结构
2. 如果一个循环结构不断的被执行,没有终止。则称为死循环!
3. 开发中大家要避免出现死循环。
*/
class ForTest1 {
public static void main(String[] args) {
int m = 12;
int n = 20;
int min = (m > n)? n : m;
for(int i = min;i >= 1;i--){
if(m % i == 0 && n % i == 0){
System.out.println("最大公约数:" + i);
break;
}
}
int max = (m > n)? m : n;
for(int i = max;i <= m * n;i++){
if(i % m == 0 && i % n == 0){
System.out.println("最小公倍数:" + i);
break;
}
}
}
}
知识点5:循环结构2:while
/*
一、凡是循环结构,都有如下的4个要素:
① 初始化条件部分
② 循环条件部分 ---> boolean类型
③ 循环体部分
④ 迭代部分
二、while循环的结构
①
while(②){
③
④
}
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ② - ... - ②
三、说明
1. for循环和while循环是可以相互转换的。
2. 关于初始化条件部分,while循环在执行结束以后,初始化条件中涉及到的变量仍然可用。 而for循环的初始化条件中定义的变量,在出了循环结构以后失效。
*/
class WhileTest {
public static void main(String[] args) {
int i = 0;
int sum = 0;
int count = 0;
while(i <= 100){
if(i % 2 == 0){
System.out.println(i);
sum += i;
count++;
}
i++;
}
System.out.println(i);
System.out.println("偶数总和为:" + sum);
System.out.println("偶数个数为:" + count);
}
}
知识点5:循环结构3:do-while
/*
一、凡是循环结构,都有如下的4个要素:
① 初始化条件部分
② 循环条件部分 ---> boolean类型
③ 循环体部分
④ 迭代部分
二、do-while循环的结构
①
do{
③
④
}while(②);
执行过程:① - ③ - ④ - ② - ③ - ④ - ② - ③ - .... - ②
三、说明:
1. do-while循环至少会执行一次循环体。
2. 从开发的使用频率讲,do-while用的较少。
*/
class DoWhileTest {
public static void main(String[] args) {
int i = 0;
int sum = 0;
int count = 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);
}
}
知识点6:while(true)、for( ; ; )
/*
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
最简单“无限” 循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,
需要根据循环体内部某些条件,来控制循环的结束。
*/
import java.util.Scanner;
class ForWhileTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int positiveNumber = 0;
int negativeNumber = 0;
while(true){
System.out.println("请输入一个整数:(输入0时,结束)");
int num = scan.nextInt();
if(num == 0){
break;
}else if(num > 0){
positiveNumber++;
}else{
negativeNumber++;
}
}
System.out.println("正数的个数为:" + positiveNumber);
System.out.println("负数的个数为:" + negativeNumber);
}
}
- 退出循环结构的两种方式:
- 循环条件返回为false
- 在循环体中执行break
知识点7:嵌套循环
/*
测试嵌套循环
1. 将一个循环结构A声明在另一个循环结构B的循环体中,则构成了嵌套循环。
A:内层循环
B:外层循环
2. 技巧:外层循环控制行数,内层循环控制列数
3. 如果外层循环循环次数为m次,内层循环循环次数为n次。则可以理解为内层循环的循环体要执行m * n次
*/
class ForForTest {
public static void main(String[] args) {
for(int i = 1;i <= 6;i++){
System.out.print("*");
}
System.out.println();
System.out.println();
/*
******
******
******
******
******
*/
for(int j = 1;j <= 5;j++){
for(int i = 1;i <= 6;i++){
System.out.print("*");
}
System.out.println();
}
for(int i = 1;i <= 5;i++){
for(int j = 1;j <= i;j++){
System.out.print("*");
}
System.out.println();
}
for(int i = 1;i <= 4;i++){
for(int j = 1;j <= 5 - i;j++){
System.out.print("*");
}
System.out.println();
}
for(int i = 1;i <= 5;i++){
for(int j = 1;j <= 5 - i;j++){
System.out.print(" ");
}
for(int k = 1;k <= i;k++){
System.out.print("* ");
}
System.out.println();
}
}
}
class NineNineTable {
public static void main(String[] args) {
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i;j++){
System.out.print(j + " * " + i + " = " + (j * i) +" ");
}
System.out.println();
}
}
}
class PrimeNumberTest1 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
boolean isFlag = true;
int count = 0;
for(int i = 2;i <= 100000;i++){
for(int j = 2;j <= Math.sqrt(i);j++){
if(i % j == 0){
isFlag = false;
break;
}
}
if(isFlag){
count++;
}
isFlag = true;
}
System.out.println("质数的个数为:" + count);
long end = System.currentTimeMillis();
System.out.println("花费的总时间为(毫秒):" + (end - start));
}
}
知识点8:break、continue
break的使用范围:
1. 应用在switch-case结构中,一旦执行,就跳出当前switch-case结构
2. 应用在循环结构中,一旦执行,就跳出前的循环结构
/*
break和continue的使用
使用场景 在循环结构中使用的作用: 相同点
break ① switch-case
② 循环结构 结束当前循环结构 在其后,不能声明执行语句。否则,编译错误
continue ① 循环结构 结束当次循环结构 在其后,不能声明执行语句。否则,编译错误
*/
class BreakContinueTest {
public static void main(String[] args) {
for(int i = 1;i <= 10;i++){
if(i % 4 == 0){
continue;
}
System.out.print(i);
}
System.out.println("#####################");
label:for(int i = 1;i <= 4;i++){
for(int j = 1;j <= 10;j++){
if(j % 4 == 0){
continue label;
}
System.out.print(j);
}
System.out.println();
}
}
}
补充:如何获取指定范围的随机数
class RandomNumberTest{
public static void main(String[] args) {
int number = (int)(Math.random() * (999-100+1) + 100);
}
}