Java基础知识(四)& 流程控制语句

4.1 if语句

1.if的第一种格式

1.格式:
ifboolean表达式){
    执行语句;
}
2.执行流程:先判断if后的boolean表达式,如果是true,执行大括号中的执行语句,否则不执行
注意:if后的boolean表达式,只要结果为boolean类型,都可以放在小括号中,哪怕是一个truefalse 
import java.util.Scanner;
public class IfDemo {

	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入一个数:");
		int a =sc.nextInt();
		System.out.println("请输入另外一个数:");
		int b =sc.nextInt();
		if (a==b) {
			System.out.println("这两个数相等");
		}

	}

}

import java.util.Scanner;

public class BIM {

	public static void main(String[] args) {
		System.out.print("请输入体重和身高:");
		Scanner sc=new Scanner(System.in);
		double weight=sc.nextDouble();
		double height=sc.nextDouble();
		double bmi=weight/(height*height);
		String s="";
		if(bmi>=18.5){
			s="偏瘦";
		}
		if((bmi>=18.5)&(bmi<24)){
			s="正常";
		}
		if((bmi>=24)&(bmi<27)){
			s="偏胖";
		}
		if((bmi>=27)&(bmi<30)){
			s="肥胖";
		}
		if((bmi>=30)){
			s="重度肥胖";
		}
		System.out.printf("你的体重是:%.2f,身高是:%.2f,bmi是:%.2f,体重状态为%s",weight,height,bmi,s);

	}

}

2.if的第二种格式

1、格式:
    if(boolean表达式){
        执行语句1}else{
        执行语句2}
2、执行流程
    1)先判断boolean表达式,如果是true,走执行语句1,否则走执行语句2.
    
import java.util.Scanner;
public class IfDemo {

	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入一个数:");
		int a =sc.nextInt();
		System.out.println("请输入另外一个数:");
		int b =sc.nextInt();
		if (a==b) {
			System.out.println("这两个数相等");
		}else {
			System.out.println("这两个整数不相等");
		}

	}

}

练习1:从键盘输入100-999某一个数并判断该数是否是水仙花数
功能描述:水仙花数指一一个n位数,其每位上的数字的3次幂之和等于它本身。例如153=13+53+3^3 ,153 是水仙花数。

编程五步骤:1)搞清楚要做什么 2) 知识准备 3)怎么做(算法设计) 4)编程、调试与测试 5总结提高

import java.util.Scanner;

public class Flower {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.print("请输入一个整数(100-999):");
		int n=sc.nextInt();
		int d1=n%10;
		int d10=n/10%10;
		int d100=n/100;
		System.out.println("d1="+d1+",d10="+d10+",d100="+d100);
		boolean flag=(Math.pow(d100, 3)+Math.pow(d10, 3)+Math.pow(d1, 3))==n;
		if (flag) {
			System.out.printf("%d是水仙花数",n);
		}
		else {
			System.out.printf("%d不是水仙花数",n);
		}
		
		
		
	}

}

练习2:从键盘输入年份,请输出该年2月的总天数,闰年2月29天,平年28天。判断该年是不是闰年

满足润年的条件:能被4整数不能被100整除或者能直接被400整除

步骤:1.创建Scannner对象,调用nextInt()键盘输入一个年份赋给变量year

​ 2.判断(year%40&&year%100!=0)||(year%4000)

​ 3.如果条件成立,输出该年是闰年,否则不是闰年。

import java.time.Year;
import java.util.Scanner;

public class IfDemo2 {

	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入一个年份:");
		int year=sc.nextInt();
		if ((year%4==0&&year%100!=0)||(year%400==0)){
			System.out.println(year+"是闰年");}
		else {
			System.out.println(year+"不是闰年");
		}	
	}
}

3.if的第三种格式:

1.格式:
    ifboolean表达式){
    执行语句1}else ifboolean表达式){
    执行语句2}else if(boolean表达式){
    执行语句3}...else{
    执行语句n;
	}
2.执行流程:
    从if开始往下挨个逐渐判断boolean表达式,哪个结果为true,就走哪个if后的执行语句,如果所有的if判断都是false,就走else对应的执行语句n。
3.使用场景
    两种以上情况的判断

注意:最后一种情况不一定要用else,但是必须要保证所有的情况都判断了,如下所示。

 public class IfDemo4 {

	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入一个数:");
		int a =sc.nextInt();
		System.out.println("请输入另外一个数:");
		int b =sc.nextInt();
		if (a>b) {
			System.out.println("a>b");
		}else if (a<b) {
			System.out.println("a<b");
			
		} else if (a==b){
			System.out.println("a=b");
		}
	}
}

import java.util.Scanner;
public class IfDemo4 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入一个数:");
		int a =sc.nextInt();

		if (a==1) {
			System.out.println("周一");
		}else if (a==2) {
			System.out.println("周二");
			
		} else if (a==3){
			System.out.println("周三");
		}else if (a==4){
			System.out.println("周四");
		}else if (a==5){
			System.out.println("周五");
		}else if (a==6){
			System.out.println("周六");
		}else if (a==7){
			System.out.println("周日");
		}
		else {
			System.out.println("没有这个星期");
		}
	}
}

注意。以上代码可以写成如下:else可以嵌套if和多个else if

import java.util.Scanner;

public class IfDemo4 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入一个数:");
		int a =sc.nextInt();
		if(a<1||a>7) {
			System.out.println("没有这个星期");
		}
		else {
			if (a==1) {
				System.out.println("周一");
			}else if (a==2) {
				System.out.println("周二");
			} else if (a==3){
				System.out.println("周三");
			}else if (a==4){
				System.out.println("周四");
			}else if (a==5){
				System.out.println("周五");
			}else if (a==6){
				System.out.println("周六");
			}else if (a==7){
				System.out.println("周日");
			}
		}
	}
}

练习:根据最新的年龄段划分标准:
0-6岁为婴幼儿
7-12岁为少儿
13-17岁为青少年
18-45岁为青年
46-69岁为中年
69岁以上的为老年
请从键盘输入一个年龄,判断属于什么年龄段

import java.util.Scanner;
public class IfDemo5 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入一个数:");
		int age =sc.nextInt();

		if (age>=0&& age<=6) {
			System.out.println("婴幼儿");
		}else if (age>7&&age<=12) {
			System.out.println("少儿");
			
		} else if (age>=13&&age<=17){
			System.out.println("青少年");
		}else if (age>=18&&age<=45){
			System.out.println("青年");
		}else if (age>=46&&age<=69){
			System.out.println("中年");
		}else if (age>=70&&age<=130){
			System.out.println("老年");
		}else {
			System.out.println("年龄不符合实际");
		}
	}
}

以上代码可以这样写,如下所示:

public class IfDemo5 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		System.out.println("请输入一个数:");
		int age =sc.nextInt();
		if (age<0 ||age>130){
			System.out.println("年龄不符合实际");
		}
		else {

			if (age>=0&& age<=6) {
				System.out.println("婴幼儿");
			}else if (age>7&&age<=12) {
				System.out.println("少儿");
				
			} else if (age>=13&&age<=17){
				System.out.println("青少年");
			}else if (age>=18&&age<=45){
				System.out.println("青年");
			}else if (age>=46&&age<=69){
				System.out.println("中年");
			}else if (age>=70&&age<=130){
				System.out.println("老年");
			}
			}
	}
}

4.2 switch语句

1.switch的基本使用

1.格式:
    switch(变量){
    	case 变量1:
            执行语句1break;
    	case 变量2:
            执行语句2break;
        case 变量3:
            执行语句3break;
    
        ...
            default:
    	执行语句n;
        	break;
}

2.执行流程:
    用变量接受的值和下面case常量进行匹配,匹配哪个case就执行哪个case对应的执行语句,如果以上所有case都没有匹配上,就走default对应的执行语句。
3.break关键字:代表一个语句,是结束switch语句
4.注意:switch能匹配什么类型的数据:
    byte  short int char  String 枚举类型
import java.util.Scanner;

public class Switch {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个数(1-4):");
		int d=sc.nextInt();
		switch (d) {
		case 1:
			System.out.print("春");
			break;
		case 2:
			System.out.print("夏");
			break;
		case 3:
			System.out.print("秋");
			break;
		case 4:
			System.out.print("冬");
			break;

		default:
			System.out.print("不存在");
			break;
		}
	}

}

2.switch穿透性

public class Switch {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个数(1-4):");
		int d=sc.nextInt();
		switch (d) {
		case 1:
			System.out.print("春");
		
		case 2:
			System.out.print("夏");
		
		case 3:
			System.out.print("秋");
		
		case 4:
			System.out.print("冬");
			break;

		default:
			System.out.print("不存在");
			break;
		}
	}

}
运行结果:
    请输入一个数(1-4):1
春夏秋冬

以上情况就是case的穿透性,如果没有break,就会出现此情况,程序就会一直往下穿透执行,直到遇到break或者switch代码执行结束了,就停止运行。

public class SwitchSeason {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个数(1-12):");
		int d=sc.nextInt();
		switch (d) {
		case 12:
			System.out.print("冬季");
			break;
		case 1:
			System.out.print("冬季");
			break;
		case 2:
			System.out.print("冬季");
		case 3:
			System.out.print("春季");
			break;
		case 4:
			System.out.print("春季");
			break;
		case 5:
			System.out.print("春季");
		case 6:
			System.out.print("夏季");
			break;
		case 7:
			System.out.print("夏季");
			break;
		case 8:
			System.out.print("夏季");
		case 9:
			System.out.print("秋季");
			break;
		case 10:
			System.out.print("秋季");
			break;
		case 11:
			System.out.print("秋季");
			break; 
		default:
			System.out.print("不存在");
			break;
		}

	}

}

利用case穿透性修改以上代码如下:

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个数(1-12):");
		int d=sc.nextInt();
		switch (d) {
		case 12:	
		case 1:
		case 2:
			System.out.print("冬季");
			break;
		case 3:
		case 4:
		case 5:
			System.out.print("春季");
			break;
		case 6:
		case 7:
		case 8:
			System.out.print("夏季");
			break;
		case 9:
		case 10:
		case 11:
			System.out.print("秋季");
			break;
		default:
			System.out.print("不存在");
			break;
		}
switchif的区别:
   1)debug
   2switch:会直接跳到相匹配的case
   3if:从上到下挨个判断

4.3 for循环语句

1.什么时候使用循环语句:
    一件事或者一段代码反复执行,考虑使用循环
2.格式:
    for(初始化变量;条件表达式;步进(自增)表达式){
        循环语句->哪段代码循环执行就将哪段代码放到此处
    }
3.执行流程:
    a.先走初始化变量
    b.判断条件表达式,如果是true,走循环语句,然后在走步进(自增)表达式(初始化的变量的值进行变化)
    c.再判断条件表达式,如果还是true,继续走循环语句,再走步进表达式
    d.在判断条件表达式,直到比较为false,循环结束。
public class DemoIf {

	public static void main(String[] args) {
		for(int i=1;i<=3;i++) {
			
			System.out.println("java is beautiful");
		}

	}

}

运行结果:
java is beautiful
java is beautiful
java is beautiful
案例1:统计1-100的偶数的个数
    
public class DemoIf {
	public static void main(String[] args) {
		int count=0;
		for(int i=1;i<=100;i++) {
			if (i%2==0) {
				count++;				
			}
		}
		System.out.println("count="+count);
	}
}


案例2:求1-100偶数的和

public class For {
	public static void main(String[] args) {
//		for (int i=1;i<=100;i++) {
//			System.out.println(i);
		int sum=0;
		for (int i=1;i<=100;i++) {
			if (i%2==0) {
				 sum=i+sum;
		}
	}
		System.out.println("sum:"+sum);
} 
}

案例4:统计1980年到现在有多少个闰年
import java.util.Scanner;

public class Forhomework {

	public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = scan.nextInt();
        int num = 0;
        for (int i = 1980; i <= year; i++) {
            if (i % 400 == 0 || (i % 4 == 0 &&i % 100 != 0)) {
                num++;
                System.out.print(i + "\t");
                System.out.println();
            }
            
        }
        System.out.println("num="+num);
    }

}

案例5:99乘法表
public class TestFor99 {

	public static void main(String[] args) {
		for(int i=1;i<10;i++) {
			for(int j=1;j<=i;j++) {
				System.out.print(j+"*"+i+"="+i*j+"\t");
				}
			System.out.println();
		}
	}

}

4.4 while循环语句

1、格式:
初始化变量;
while(条件表达式){

	循环语句->哪段代码循环执行就将哪段代码放到此处
        步进表达式;
}
2.执行流程:
    a.初始化变量
    b.判断条件表达式,如果是true,走循环语句,然后在走步进(自增)表达式(初始化的变量的值进行变化)
    c.再判断条件表达式,如果还是true,继续走循环语句,再走步进表达式
    d.在判断条件表达式,直到比较为false,循环结束。
案例1:重复输出五遍"java is beautiful"

package week06;

public class WhileDemo {
	public static void main(String[] args) {
		int i=0;
		while(i<5) {
			System.out.println("java is beautiful");
			i++;
		}
	}
}

案例2:求1+2+3+...+100的和
package week06;

public class WhileDemo {
	public static void main(String[] args) {
		int i=1;
		int sum=0;
		while(i<101) {
			sum=sum+i;
			i++;
		}
		System.out.println("sum="+sum);
	}
}

案例3:求1-100偶数的和
package week06;

public class WhileDemo {
	public static void main(String[] args) {
		int i=1;
		int sum=0;
		while(i<101) {
			if (i%2==0) {
				sum=sum+i;}
			i++;
		}
		System.out.println("sum="+sum);
	}
}

4.5 do… while循环语句

1.格式:
初始化变量
do{
    循环语句;
    步进表达式;
}while(条件表达式)2.执行流程  
    a.初始化变量
    b.走循环语句,
    c.走步进(自增)表达式(初始化的变量的值进行变化)
    d.再判断条件表达式,如果还是true,继续走循环语句,再走步进表达式
    e.在判断条件表达式,直到比较为false,循环结束。
    
3.特点:至少循环一次
package week06;

public class DoWhile {
	public static void main(String[] args) {
		int i=0;
		do {
			System.out.println("java is beautiful");
			i++;
		}while(i<0);
	}
}

4.6 break语句 VS continue语句

1.break语句在switch中代表结束switch语句
2.在循环中代表结束循环
3.结束当前本次循环,直接进入下一次循环,直到条件为false为止。
//练习1:连续输出4次“java is beautiful”,除了第三次不输出
public class BreakContinue {
	public static void main(String[] args) {
		for(int i=1;i<5;i++) {
			if(i==3) {
				break;
			}
			System.out.println("java is beautiful "+i);
		}	
	}
}
运行结果:
  java is beautiful 1
  java is beautiful 2
 
public class BreakContinue {
	public static void main(String[] args) {
		for(int i=1;i<5;i++) {
			if(i==3) {
				continue;
			}
			System.out.println("java is beautiful "+i);
		}
	}
}

运行结果:
	java is beautiful 1
	java is beautiful 2
	java is beautiful 4
	
//练习2:要求用户输入用户名和密码,只要不是admin和111就提示用户名或密码不正确,请重新输入。正确时结束循环,提示登陆成功。
import java.util.Scanner;

public class TestJoin {

	public static void main(String[] args) {
		String name ="admin";
		String pwd ="111";
		Scanner sc =new Scanner(System.in);//创建输入对象
		while(true) {
			System.out.println("请输入用户名:");
			String name_s=sc.nextLine();//nextLine和next:输入字符串方法
			System.out.println("请输入密码:");
			String pwd_s=sc.nextLine();
			
			if(name.equals(name_s)&&pwd.equals(pwd_s))//使用字符串的equals()方法实现字符串匹配是否相同
				{
					System.out.println("登录成功");
					break;
				}
			else {
				System.out.println("用户名或密码不正确");
			}
		}
		

	}

}

    
//要求用户输入用户名和密码,只要不是admin和111就提示用户名或密码不正确,您现在还有剩余多少次机会"。第五次正确时结束循环,提示登陆成功。

//登录次数限制
import java.util.Scanner;

public class TestJoin {

	public static void main(String[] args) {
		String name ="admin";
		String pwd ="111";
		Scanner sc =new Scanner(System.in);//创建输入对象
		int i =0;
		while(i<=5) {
			System.out.println("请输入用户名:");
			String name_s=sc.nextLine();//nextLine和next:输入字符串方法
			System.out.println("请输入密码:");
			String pwd_s=sc.nextLine();
			i++;
			if(name.equals(name_s)&&pwd.equals(pwd_s))//使用字符串的equals()方法实现字符串匹配是否相同
				{
					System.out.println("登录成功");
					break;
				}
			else {
				System.out.println("用户名或密码不正确,您现在还剩"+(5-i)+"次机会");
				
			}
		}
		

	}

}

//练习3:一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)
public class PaperWeight {

    public static void main(String[] args) {
        int sum = 8;
        int count = 0;
        for (int i = 0;; i++) {
            sum = sum * 2;
            count++;

            
            if (sum >= 884813000) {
                System.out.println("次数为:" + count);
                System.out.println(sum);
                break;
            }
            
        }
        
    }
 
}
运行结果
次数为:27
1073741824


练习4:求10!+9!+8!++1! = ?
public class Jieceng {

	public static void main(String[] args) {
		int sum = 0;
		for (int i = 1;i<=2;i++){//外层循环实现累加
			int jie=1;
			for (int j =1;j<i;j++){//内层循环实现阶乘
				jie=j* i;
			}
			sum += jie;
		}
		System.out.println(sum);
	}

}

练习五:求1-100所有质数的和(质数:只能被1和它本身整除。1不是质数,也不是合数。)
public class Jieceng{
	public static void main(String[] args){
		int sum = 0;
		for (int i = 2;i<=100;i++){
			for (int j = 2; j<i;j++){
			if (i%j == 0){
				break;
				}
			
			}
			sum=sum+i;
		}
		System.out.println(sum);
	}
}
运行结果:
5049

练习六:输出1100之间能被3整除的和,并输出前五个数
public class Jieceng{
	public static void main(String[] args){
		int sum = 0;
		int count=0;
		for (int i = 1;i<=100;i++){
			if(i%3==0) {
				sum=sum+i;	
				count++;
				if(count<=5 ) {
					System.out.println("第"+count+"个能被3整除的数是"+sum);
				}
			}

			
			
		}
		System.out.println("sum="+sum);
		
	}
}
运行结果:
第1个能被3整除的数是32个能被3整除的数是93个能被3整除的数是184个能被3整除的数是305个能被3整除的数是45
sum=1683


在这里插入图片描述

4.7 死循环

public class BreakContinue {
    public static void main(String[] args) {
        int i = 0;
        while (i < 10) {
        	int b=6;
            if (i == 5) {
                continue; // 这里应该是continue,用于跳过当i等于5时的迭代
            }
            System.out.println(i);
            i++;
            
        }}}

以上存在问题是当i等于5时,if满足条件,程序走到continue语句后不继续走,而是回到循环判断语句,此时的i还是等于5,程序往下走,走到if,满足条件,遇到continue,又再一次回到while循环判断,继续走到continue,又回到while循环判断…反反复复,程序运行不会结束,虽然结果运行看到的是0到4,实际程序还未结束,因此,这种现象称为死循环,。
但是,把以上的continue换位break时,当i等于5时,满足条件,执行break语句,程序终止循环,运行结束,运行结果为0到4,结果看起来和continue的一样,实际上程序存在的逻辑不一样,要注意程序的逻辑以及适当使用continue和break。

4.8 嵌套循环

1.循环中还有循环,可以两层循环以及多层循环
2.执行流程:先执行外层循环,再进入内存循环,内层循环一直循环,直到内层循环结束,外层循环进入下一次循环,直到外层循环结束,整体结束。
    
    
案例1: 打印矩形    
public class Qiantao {
	public static void main(String[] args) {
        //外层循环控制行
		for(int i=0;i<=5;i++) {
            //内层循环控制列
			for(int j=0;j<=5;j++) {
				System.out.print("*");
			}
			System.out.println();
				
		}
	}
}
运行结果:
******
******
******
******
******
******   
  
    
案例2 :打印正直角三角    
public class Qiantao1 {
	public static void main(String[] args) {
		for(int i=0;i<=5;i++) {
			for(int j=0;j<=i;j++) {
				System.out.print("*");
			}
			System.out.println();
				
		}
	}
}
运行结果:
*
**
***
****
*****
******    

知识点分享,有不足的地方望广大学友指点

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值