逻辑控制整理

顺序结构

从上往下执行

分支结构

  1. if else
  2. switch

1. if else

基本格式:

​ if(布尔类型) { }

判定一个数是奇数还是偶数

	public static void main(String[] args) {
    
    
		int num = 10;
		if (num % 2 == 0) {
    
    
			System.out.println("num 是偶数");
		} else {
    
    
			System.out.println("num 是奇数");
		}
	}

运行结果:num 是偶数

判定一个数是正数还是负数

	public static void main(String[] args) {
    
    
		int num = 10;
		if (num > 0) {
    
    
			System.out.println("num 是正数");
		} else if (num < 0) {
    
    
			System.out.println("num 是负数");
		} else {
    
    
			System.out.println("num 是0")}
	}

运行结果:num 是正数

判定某一年是否是闰年

	public static void main(String[] args) {
    
    
		Scanner scan = new Scanner(System.in);
		int year = scan.nextInt();
		if ((year % 4 == 0 && year % 100 != 0)  || (year % 400 == 0)) {
    
    
			System.out.println("闰年!");
		}else {
    
    
			System.out.println("不是闰年!");
		}
	}

运行结果:2000 //键盘自己输
闰年!

改进:(循环输入)
public static void main(String[] args) {
    
    
		Scanner scan = new Scanner(System.in);

		while (scan.hasNextInt()) {
    
     //可以多次输入
			int year = scan.nextInt();
			if ((year % 4 == 0 && year % 100 != 0)  || (year % 400 == 0)) {
    
    
				System.out.println("闰年!");
			}else {
    
    
				System.out.println("不是闰年!");
			}
		}	
	}

运行结果:

2000
闰年!
2021
不是闰年!
//怎么结束?   ctrl+c 中断程序 强制退出     ctrl+d+enter  正常退出

注意事项1:悬垂else

public static void main(String[] args) {
    
    
		int x = 10;
		int y = 10;
		if (x == 10) 
			if (y == 10) 
				System.out.println("aaa");
		else //相当于和y==10匹配
			System.out.println("bbb");
}

运行结果:aaa (else只会跟最近的if结合

2. switch语句

基本语法:

switch(整数|枚举|字符|字符串){
	case 内容1 : {
		内容满足时执行语句;
		break;
	}
……
	default:{
		内容都不满足时执行语句;
		break;
	}
}

示例:

public static void main(String[] args) {
    
    
		int a = 10;
		switch (a) {
    
    
			case 1: 
				System.out.println("1");
				break;//不要省略,否则会出现多分支选择
			case 2:
				System.out.println("2");
				break;
			default:
				System.out.println("请输入正确的数字!");
				break;
		}
	}

运行结果:请输入正确的数字!

不能做switch参数的类型------long float double boolean

循环结构

while循环

基本语法:

​ while(循环条件) {循环语句;} 与C区别:条件只能是布尔表达式

当循环条件为true时,执行循坏语句, 否则循环结束

打印1~10的数字

	public static void main(String[] args) {
    
    
		int num = 1;//初始条件
		while (num <= 10) {
    
    //循坏判断条件
			System.out.println(num);
			num++;//步进
		}
	}

运行结果:

1
2
3
4
5
6
7
8
9
10

计算1~100的和

public static void main(String[] args) {
    
    
		int n = 1;
		int result = 0;
		while (n <= 100) {
    
    
			result += n;
			n++;
		}
		System.out.println(result);
	}

运行结果:5050

计算5的阶乘

	public static void main(String[] args) {
    
    
		int i = 1;
		int ret = 1;
		while (i <= 5) {
    
    
			ret *= i;
			i++;
		}
		System.out.println(ret);
	}

运行结果:120

改进:5的阶乘的和 :5!+4!+3!+2!+1!

自己写的:

public static void main(String[] args) {
    
    
		int sum = 0;
		int num = 5;
		int i = 1;
		int ret = 1;
		while (i <= 5) {
    
    
			ret *= i;
			i++;
			sum += ret;
		}
		System.out.println(sum);
	}

老师写的:(目的:循环可以嵌套)

public static void main(String[] args) {
    
    
		int sum = 0;
		int num = 1;
		while (num <=5) {
    
    
			//5!
			int i = 1;
			int ret = 1;
			while (i <= num) {
    
    
				ret *= i;	
				i++;
			}
			// System.out.println(ret);
			sum += ret;
			num++;
		}
		System.out.println(sum);			
	}

运行结果:

1
2
6
24
120
153

break

作用:让循环提前结束

代码示例:找到100~200中第一个3的倍数

public static void main(String[] args) {
    
    
		//找到一个既能被3整除,又能被5整除的数
		Scanner scan = new Scanner(System.in);
		int num = scan.nextInt();
		while (num <= 200) {
    
    
			if (num % 15 == 0) {
    
    
				System.out.println(num);
				break;
			}
			System.out.println("hhhhhh");
			num++;
		}
	}

运行结果:

hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh//一共有14个
15

continue(注意区别)

作用:结束本趟循环

代码示例:

public static void main(String[] args) {
    
    
		//找到一个既能被3整除,又能被5整除的数
		Scanner scan = new Scanner(System.in);
		int num = scan.nextInt();
		while (num <= 200) {
    
    
			if (num % 15 == 0) {
    
    
				System.out.println(num);
				continue;
			}
			System.out.println("hhhhhh");
			num++;
		}
	}

运行结果:

hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh
hhhhhh//一共有14个
15
15
15
……//死循环

共性:

​ 必须用到循环当中,但break可以也用到switch;

for循环

基本语法:

​ for(表达式1; 表达式2 ;表达式3){

​ 循环体

​ }

执行顺序:

  1. 表达式1 只执行一次。初始化
  2. 判断表达式2是否为真;
  3. 若为真,执行循环体;
  4. 执行表达式3。

第二趟:

  1. 判断表达式2是否为真;
  2. 若为真,执行循环体;
  3. 执行表达式3。

代码示例:

public static void main(String[] args) {
    
    	
		// int i = 1;
		for (int i =  1; i <= 10; i++) {
    
    
			System.out.println(i);			
		}
	}

运行结果:

1
2
3
4
5
6
7
8
9
10

注意:

	 	int i = 1;
		for (; ; ) {
    
    
			if(i <= 10) {
    
    
				System.out.println(i);		
            	i++;
            }
		}

运行结果:

1
2
3
4
5
6
7
8
9
10
闪烁//if循环完毕,但由于表达式2为真,什么都不打印   for死循环
问题:
  1. 如果表达式2,没有for循环 为什么可以进入循环语句?------------如果没有表达式2,那么永远为真
  2. 死循环
for( ; ; ) {
    
    
    System.out.println("cc");		
}
while(true) {
    
    
    System.out.println("cc");		
}

计算5!+4!+3!+2!+1!

	public static void main(String[] args) {
    
    
		Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
		int sum = 0;
		for (j = 1; j <= num; j++) {
    
    
			int ret = 1;
			for (int i = 1; i <= j; i++) {
    
    
				ret *= i; 
			}
			sum += ret; 
		}
		System.out.println(sum);
	}

运行结果:

5
153

do while 循环

基本语法

​ do {

​ 循环语句;

​ } while (循环条件);

从上往下执行 先执行循环语句,在判定循环条件;

代码示例:

	public static void main(String[] args) {
    
    
		int num = 0;
		do{
    
    
			System.out.println("hhhh!");
		}while(num !=0);
	}

运行结果:

hhhh!

本来num!= 0才执行,但是do while 必须执行一次

从键盘输入

使用Scanner读取字符串/整数/浮点数

	public static void main(String[] args) {
    
    
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入你的姓名:");
		String name = scan.nextLine();
		System.out.println("请输入你的年龄:");
		int age = scan.nextInt();
		System.out.println("请输入你的工资:");
		float salary = scan.nextFloat();
		System.out.println("请确认你的信息:");
		System.out.println("姓名:" + name + "\n" + "年龄:" + age + "\n" + "工资:" + salary);
		scan.close();//注意要记得调用关闭方法   但现在一般不写
	}

运行结果:

请输入你的姓名:
小曹
请输入你的年龄:
20
请输入你的工资:
15000
请确认你的信息:
姓名:小曹
年龄:20
工资:15000.0

使用Scanner循环读取n个数字(重点)

	public static void main(String[] args) {
    
    
		Scanner scan = new Scanner(System.in);
		while(scan.hasNextInt()) {
    
    //hasNextInt返回的是一个boolean
			int num = scan.nextInt();
			System.out.println(num);
		}
	}

运行结果:

12
12
14
14

ctrl+c 中断 ctrl+d或者ctrl+z 正常结束

猜数字游戏

电脑随机生成一个数字(100~200之间),用户来猜,看大了还是小了

	public static void main(String[] args) {
    
    
		Scanner scan = new Scanner(System.in);
		Random rand = new Random();//与C语言不同,一旦括号内给定一个数(时间戳),则每次产生的随机数都是一样的
		int randNum = rand.nextInt(100)+100;//[100~200)
		// System.out.println(randNum);显示随机数
		while(true) {
    
    
			System.out.println("请输入你要猜的数字:");
			int num = scan.nextInt();
			if (num < randNum) {
    
    
				System.out.println("你猜的数字小了,请重新输入!");
			} else if (num > randNum) {
    
    
				System.out.println("你猜的数字大了,请重新输入!");
			} else {
    
    
				System.out.println("恭喜你!你猜对了!!!");
				break;
			}
		}
	}

运行结果:

请输入你要猜的数字:
50
你猜的数字大了,请重新输入!
请输入你要猜的数字:
25
你猜的数字大了,请重新输入!
请输入你要猜的数字:
10
恭喜你!你猜对了!!!

Guess you like

Origin blog.csdn.net/ccyzq/article/details/121410260