Day02的探索

条件语句与循环语句

当我看第一个if语句时,我觉得不过如此,直到慢慢出现套娃······直到出现循环,循环套娃···然后开始来回的看,一整天没有离开座位,在简单案例里推敲,练习。随手在手机备忘录里记录下那一刻给我印象的一切。因为此刻,只有这些是陪伴我的,回应我的。它们一样有千变幻化,但是万象于我唯一。事事回应是一种基本

一.条件语句

<1>条件语句之if

语法:

if(条件){
条件成立时执行的代码
}

  • 如果 if 条件成立时的执行语句只有一条,是可以省略大括号滴!但如果执行语句有多条,那么大括号就是不可或缺的
  • if 条件的布尔表达式成立时,才执行里面代码
  • 当时的题目:判断数值 20 是否为偶数
public class HelloWorld {
    public static void main(String[] args) {
    int one = 20 ;//将20赋值给变量one
    if(one%2==0){//判断是否为偶数。我们知道一个数除以2余数为0即为偶数
    System.out.println("one是偶数");
}
}
}

2. if····else

语法:

if(条件的布尔表达式){
代码块1
}else{
代码块2
}

  • 当时的题目:判断年龄25是否大于18,得到成年或未成年
public class HelloWorld {
    public static void main(String[] args) {
		int age=25;
		if (age>=18){
		    System.out.println("成年");
		}else{
		    System.out.println("未成年");
		}
}
}

3. 多重if

语法:

if(条件1){
代码块1
}else if(条件2){
代码块2
}else{
代码块3
}

  • 例:

    public class HelloWorld {
        public static void main(String[] args) {
    		int age=25;//定义变量age为25
    	    if(age>60){//判断是否大于60
    	       System.out.println("老年");
    	    }else if(age>40){//判断是否大于40
    	       System.out.println("中年");
    	    }else if(age>18){//判断是否大于18
    	       System.out.println("少年");
    	    }else {//如果以上都不成立,则执行以下输出
    	       System.out.println("童年");
      	    }
    	}
    }
    

4. 嵌套if

语法:

if(条件1){
​ if(条件2){
​ 代码块1
​ }else{
​ 代码块2
​ }
}else{
​ 代码块3
}

  • 可能会开始觉得前面判断的都是数值,那如果不是数值呢?

    可以用 equals( ) 来判断字符串的内容是否相同,相同则ture,不同则false

  • 例:

public class HelloWorld {
    public static void main(String[] args) {
		int score = 94;//score储存预赛成绩
		String sex = "女";//定义sex为性别
        if(score>80){//判断预赛成绩是否大于80
            if(sex.equals("女")){//在满足大于80的前提下,判断性别是否为 女
                System.out.println("进入女子组决赛");
            }else{
                System.out.println("进入男子组决赛");
            }
        }else{//判断不满足大于80的大前提下,直接输出下面结果
                System.out.println("未进入决赛");
            }
        }
 	
}

<2>条件语句之switch

当需要对选项进行等值判断时,使用 switch 语句更加简洁明了

语法:

switch(表达式){
case 值1:
执行代码块1
break;
case 值2:
执行代码块2
break;
case 值3:
执行代码块3
break;
default:
默认执行的代码
}

  1. 它的执行过程:

当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句 或者 switch 语句块结束;如果没有匹配的 case 语句则执行 default 块的代码。

  1. 有几点需要知道:
  • switch 后面小括号中表达式的值必须是整型或字符型

  • case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2

  • case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束

  • 可以把功能相同的 case 语句合并起来

  • default 块可以出现在任意位置,也可以省略

当时我想了一个问题,如果没有break在句中,那么是不是全部都执行并输出?我立刻试验了一下,将全部break去掉,又试验在不同位置去掉它,结果发现这样的试验结果
当没有break时,程序会从第一个值开始判断,在没有判断到符合的值时,不会输出,但是一旦判断到符合的值时,从当前位置开始往后所有的都会执行并输出,无论是否符合

例:

public class Demo2 {
    public static void main(String[] args) {
		char today='日';
		switch (today){
		    case '一':
		    case '三':
		    case '五':
		        System.out.println("吃包子");
		        break;
		    case '二':
		    case '四':
		    case '六':
		        System.out.println("吃油条");
		       break;
		    default:
		        System.out.println("吃主席套餐");
		}
  
	}
}

此时输出结果为:吃主席套餐

①当把today 改为"一",并将第一个break去掉时:

public class Demo2 {
    public static void main(String[] args) {
		char today='一';
		switch (today){
		    case '一':
		    case '三':
		    case '五':
		        System.out.println("吃包子");
		        
		    case '二':
		    case '四':
		    case '六':
		        System.out.println("吃油条");
		        break;
		    default:
		        System.out.println("吃主席套餐");
		}
  
	}
}

此时输出结果为:
吃包子
吃油条

②当把today 改为"四",去除全部break:

public class Demo2 {
    public static void main(String[] args){
        char today='四';
        switch (today){
            case '一':
            case '三':
            case '五':
                System.out.println("吃包子");

            case '二':
            case '四':
            case '六':
                System.out.println("吃油条");
               
            default:
                System.out.println("吃主席套餐");
        }

    }
}

此时输出结果为:
吃油条
吃主席套餐


二.循环语句

<1>循环语句之while

语法:

while(判断条件){
循环操作
}

执行过程:

1 >、 判断 while 后面的条件是否成立( true / false )

2 >、 当条件成立时,执行循环内的操作代码 ,然后重复执行< 1 >、< 2 >, 直到循环条件不成立为止

  • 特点:先判断,后执行

例:

public class HelloWorld {
    public static void main(String[] args) {
        
		int i = 1; // 代表 1 - 5 之间的数字
        
		// 当变量小于等于 5 时执行循环
		while (i<=5) {
            
			// 输出变量的值,并且对变量加 1,以便于进行下次循环条件判断
			System.out.println(i);
			i++;
		}
	}
}

2. do····while

语法:

do{
循环操作
}while(判断条件);

执行过程:
1>、 先执行一遍循环操作,然后判断循环条件是否成立

2>、 如果条件成立,继续执行< 1 > 、< 2 >,直到循环条件不成立为止

  • 特点: 先执行,后判断
    由此可见,do...while 语句保证循环至少被执行一次!

例:

public class HelloWorld {
    public static void main(String[] args) {
        
		int sum = 0; // 保存 1-50 之间偶数的和
        
		int num = 2; // 代表 1-50 之间的偶数
        
		do {
			//实现累加求和
           
            sum=sum+num; 
			num = num + 2; // 每执行一次将数值加2,以进行下次循环条件判断
            
		} while (num<=50); // 满足数值在 1-50 之间时重复执行循环
        
		System.out.println(" 50以内的偶数之和为:" + sum );
	}
}

<2>循环语句之for

语法:

for(循环变量初始;循环条件;循环变量的变化){
循环操作
}

执行过程:

1>、 执行循环变量初始化部分,设置循环的初始状态,此部分在整个循环中只执行一次

2>、 进行循环条件的判断,如果条件为 true ,则执行循环体内代码;如果为 false ,则直接退出循环

3>、 执行循环变量变化部分,改变循环变量的值,以便进行下一次条件判断

4>、 依次重新执行< 2 >、< 3 >、< 4 >,直到退出循环

  • 特点:相比 while 和 do...while 语句结构更加简洁易读
  • while,do···while,for 三种循环可以相互替换

例:

public class HelloWorld {
    public static void main(String[] args) {
		int sum = 0; // 保存不能被3整除的数之和
		
		// 循环变量 i 初始值为 1 ,每执行一次对变量加 1,只要小于等于 100 就重复执行循环
		for (int i = 1;  i<=100; i++){
			
			// 变量 i 与 3 进行求模(取余),如果不等于 0 ,则表示不能被 3 整除
			if (i % 3 != 0) { 
				sum = sum + i; // 累加求和
			}
		}
		
		System.out.println("1到100之间不能被3整除的数之和为:" + sum);
	}
}

一些点:

  1. for 关键字后面括号中的三个表达式必须用 “;” 隔开,三个表达式都可以省略,但 “;” 不能省略。

a. 省略“循环变量初始化”,可以在 for 语句之前由赋值语句进行变量初始化操作,

int num=10;
for(;num<=15;num++){
System.out.print("Hello");
}

b. 省略“循环条件”,可能会造成循环将一直执行下去,也就是我们常说的“死循环”现象。需要用break强制跳出

c. 省略“循环变量变化”,可以在循环体中进行循环变量的变化

for(int num=10;num<=15;){
System.put.print("Hello");
num++;
}
  1. for 循环变量初始化和循环变量变化部分,可以是使用 “,” 同时初始化或改变多个循环变量的值
for(int x=1,y=2;x<5;x++,y++){
System.out.print(x+"+"+y+"="(x+y));
}

同时给x,y赋值,循环变量x,y同时变化。

  1. 循环条件部分可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先级。就像数学里面运算有优先级一样

<3>多重循环

我愿称之为套娃模式,循环里面套循环。三种循环语句可以自身嵌套,也可以相互嵌套,最常见的就是二重循环。在二重循环中,外层循环每执行一次,内层循环要执行一圈

img

例:

public class HelloWorld {
    public static void main(String[] args) {
        
		System.out.println("打印直角三角形");
        
		// 外层循环控制行数
		for (int i = 1; i<=3;i++ ) {
            
			// 内层循环控制每行的*号数
			// 内层循环变量的最大值和外层循环变量的值相等
			for (int j = 1; j<=i ;j++ ) {
                
				System.out.print("*");
			}
            
			// 每打印完一行后进行换行
			System.out.println();
		}
	}
}

<4>循环跳转语句

1. break

break前面有提到,遇到break就是退出循环。

如:

public class HelloWorld {
    public static void main(String[] args) {
		
		// 保存累加值
		int sum = 0;
		
		// 从1循环到10
		for (int i = 1; i <= 10; i++) {
			
			// 每次循环时累加求和
			sum = sum + i;
			
			// 判断累加值是否大于20,一旦满足条件则退出循环
			if (sum>20) {
				
				System.out.print("当前的累加值为:" + sum);
				
				//退出循环
				break;
			}
		}
	}
}

2. continue

continue 的作用是跳过循环体中剩余的语句执行下一次循环。感觉没有break那么绝,直接给你停止,退出。continue是过了、停了当前这一段循环,继续给你进入新的循环

比如实现1···10之间所有偶数之和

public class HelloWorld {
    public static void main(String[] args) {

		int sum = 0; // 保存累加值

		for (int i = 1; i <= 10; i++) {

			// 如果i为奇数,结束本次循环,进行下一次循环
			if (  i%2!=0  ) {
				continue;
			}

			sum = sum + i;
		}

		System.out.print("1到10之间的所有偶数的和为:" + sum);
	}
}

一道题中学到的一些

题:任意给定一个小于10位的数,判断它是几位数。

public class Demo1 {
    public static void main(String[] args) {
        System.out.print("请输入初始值:");
        int num = new Scanner(System.in).nextInt();
        int count = 0;
        if(num>=0 && num<=999999999){
            while (num!=0){
                num/=10;
                count++;
            }
            System.out.println("您输入的是:"+count+"位数");
        }else{
            System.out.println("您输入的值不符合要求");
        }
    }
}
  • 这题虽然假设给定的值为999,我本可以直接int num=999; 代入完事了。但是我不舒服,因为题目中说“任意“,可我怎么知道该是多少呢,如果一个软件程序要获得我输入的任意数值,如何获取呢?于是我学会了获取用户输入的值:

    int num = new Scanner(System.in).nextInt();

    如果是字符

    String num = new Scanner(System.in).next();

    然后得出上面的代码内容

  • 到这没有结束,我又想为什么int num = new Scanner(System.in).nextInt();
    后面是 nextInt 而不是 nextint。然后查了资料,发现理论还没到那个地步,但是这提醒我后面注意这些知识

  • 还是没结束,因为我执行代码后,随意输入了一次为1999999999,一次为2999999999。发现第一次能得到“您输入的值不符合要求”,第二次却无法得到这个输出,我返回去查,去问一切网上、身边可能知道原因的人,最后得知我第二次输入的值超出了int的上限。所以在前面一篇内容里加入了int的内容,算是我课外零碎学到的东西吧。

  • 最后我得知要用长整型long。然后我照葫芦画瓢,猜测应该也是nextLong,结果真对了··

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        System.out.print("请输入初始值:");
        long num = new Scanner(System.in).nextLong();
        int count = 0;
        if(num>=0 && num<=999999999){
            while (num!=0){
                num/=10;
                count++;
            }
            System.out.println("您输入的是:"+count+"位数");
        }else{
            System.out.println("您输入的值不符合要求");
        }
    }
}

终于得到:
请输入初始值:9999999999
您输入的值不符合要求


插一张不会博客,不会Typora时,搁手机里临时回顾复习记录的图
还有错别字哈哈哈
image

posted @ 2021-04-02 22:04  J九木  阅读(51)  评论(0编辑  收藏  举报