Java执行语句与循环(打印特殊三角形)

转义字符

理解:具有特殊意义的字符本身

常见转义字符

符号含义
\"表示一个双引号字符
\’表示一个单引号字符
\\表示一个斜杠字符
\n表示换行
\t水平制表符
System.out.println("刘亦菲说:\"我爱你\"");
System.out.println("刘亦菲说:\'我爱你\'");
System.out.println("刘亦菲说:\\我爱你\\");

System.out.print(); -- 输出
System.out.println(); -- 输出+换行

System.out.print("我爱你\n");
System.out.print("我爱你");

System.out.println("3*3=9\t3*4=12\t3*5=15");
System.out.println("4*3=12\t4*4=16\t4*5=20");

常量

理解:在程序执行过程中不可发生改变的量

分类

​ 数字字面量:程序中出现的数字

​ 整数数字默认int类型

​ 小数数字默认double类型

​ 字面值常量:使用双引号括起来的内容

System.out.println("1234567")

​ 使用final修饰的变量

final int I = 100;
System.out.println(I);

拓展命名规范

​ 大驼峰命名法(帕斯卡命名法)

​ 作用:类名

​ 理解:所有单词首字母大写

​ ps:public static StudentManageSystem{}

​ 小驼峰命名法

​ 作用:方法名、变量名

​ 理解:除了第一个单词,所有单词首字母大写

​ ps:int curCapacity = 100;

​ 常量命名法

​ 作用:常量

​ 理解:所有单词字母大写,单词之间用下划线连接

​ ps:final int MAX_SCORE = 100;

Java的执行语句

分类:

  1. 顺序语句:方法里面的代码从上往下执行
  2. 分支语句:条件成立就执行某个功能
    1. if分支
    2. swith分支
  3. 循环语句:条件成立就重复执行某个功能
    1. for循环
    2. while循环
    3. do-while循环
  4. 特殊的流程控制语句
    1. break
    2. countinue
    3. return
    4. label

if语句

简单if语句

if(表达式){
    执行语句
}

复杂if语句:麻生希Java成绩大于98分,而且音乐成绩大于80分,老师奖励他;或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他。

Scanner scan = new Scanner(System.in);
System.out.println("请输入Java成绩:");
double javaScore = scan.nextDouble();
System.out.println("请输入音乐成绩:");
double musicScore = scan.nextDouble();

if((javaScore>98 && musicScore>80) || (javaScore==100 && musicScore>70)){
    System.out.println("奖励麻生希法拉利玩具赛车一辆");
}

if...else..语句:如果麻生希Java考试成绩大于98分,老师就奖励他一个劳斯莱斯,否则老师就罚他进行编码二选一

Scanner scan = new Scanner(System.in);
System.out.println("请输入考试成绩:");
double score = scan.nextDouble();

if(score > 98){
    System.out.println("奖励麻生希劳斯莱斯玩具赛车一辆");
}else{
    System.out.println("刘亦菲给麻生希通宵补课...");
}

多重if语句:人类的健康值在
15-20的数值内为偏瘦
20-25的数值内为健康
25-30的数值内为偏胖
(健康值算法为:体重(Kg) / 身高(米)的平方)多选一

Scanner scan = new Scanner(System.in);
System.out.println("请输入体重(Kg):");
double weight = scan.nextDouble();
System.out.println("请输入身高(M):");
double height = scan.nextDouble();

double health = weight/(height*height);

if(health>15 && health<=20){
    System.out.println("小护士说:\"偏瘦,多吃垃圾食品、多喝啤酒、多熬夜\"");

}else if(health>20 && health<=25){
    System.out.println("小护士说:\"健康,保持现有状态\"");

}else if(health>25 && health<=30){
    System.out.println("小护士说:\"偏胖,多做运动,嘿嘿嘿\"");

}else{
    System.out.println("小护士说:\"健康值异常,请到医院进行详细检查\"");
}

嵌套if语句:举行运动会,百米赛跑跑入16秒内的学生有资格进决赛,根据性别分别进入男子组和女子组。

可以无限层嵌套

最好不要超过3层,嵌套越多可读性越差

Scanner scan = new Scanner(System.in);

System.out.println("请输入成绩:");
double score = scan.nextDouble();

if(score>=0 && score<16){
    System.out.println("请输入性别:");
    String sex = scan.next();

    if(sex.equals("男")){//判断两个字符串的内容是否相同(sex和"男")
        System.out.println("恭喜进入到男子组决赛");

    }else if(sex.equals("女")){//判断两个字符串的内容是否相同(sex和"女")
        System.out.println("恭喜进入到女子组决赛");

    }else{
        System.out.println("性别异常");
    }
}else if(score>=16){
    System.out.println("你被淘汰了,重在参与");
}else{
    System.out.println("成绩异常");
}

swith语句

语法结构:
switch(表达式){
    case1:
        ...代码块1...
    break;
    case2:
        ...代码块2...
    break;
    case 值n:
        ...代码块n...
    break;
    default:
        ...default代码块...
    break;
}

理解:

  1. 表达式的结果和case后面的值比较,如果相同就执行相应代码块,都不相同就执行default代码块

  2. 根据需求default部分可以省略

  3. break表示跳出当前分支

案例:麻生希参加计算机编程大赛

如果获得第一名,将参加千锋组织的1个月马尔代夫旅游

如果获得第二名,将奖励苹果Pro笔记本电脑一部

如果获得第三名,将奖励移动硬盘一个

否则,刘亦菲晚上给麻生希通宵补课

Scanner scan = new Scanner(System.in);
System.out.println("请输入比赛名次:");
String str = scan.next();

switch(str){
    case "第一名":
        System.out.println("和刘亦菲一起参加千锋组织的1个月马尔代夫旅游");
    break;
    case "第二名":
        System.out.println("奖励苹果Pro笔记本电脑一部");
    break;
    case "第三名":
        System.out.println("奖励移动硬盘一个");
    break;
    default:
        System.out.println("刘亦菲晚上给麻生希通宵补课");
    break;
}

面试题:

  1. case的值可以相同嘛?不允许相同

  2. default可以省略吗?可以省略,相当于多重if里面的else{}

  3. break可以省略吗?可以

  4. default的位置一定要是最后吗?不一定,放最后是为了提高代码可读性

  5. 表达式的值的类型可以是什么?byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)

  6. 为什么只支持byteshortint、``charString(JDK1.8)、枚举(JDK1.5)?

    switch底层只识别intbyte --> int 自动转型
    short -> int 自动转型
    int  --> int 直接使用
    char --> int 获取字符的码值
    String-> int 获取字符串的hash码(获取字符串中多个字符的码值 + 散列算法,算出来的结果就是hash值)
    枚举 --> int 获取枚举对象的编号
    

需求:输入年和月,输出当月的天数

/**分析:
1、3、5、7、8、10、12月 - 31天
4、6、9、11月 - 30天
2月 - 平年28天、闰年29天
年份被4整除并且不能被100整数 或者 被400整除的年份就是闰年
*/
Scanner scan = new Scanner(System.in);
System.out.println("请输入年:");
int year = scan.nextInt();
System.out.println("请输入月:");
int month = scan.nextInt();

int day = 0;
switch(month){
    case 1:case 3:case 5:case 7:case 8:case 10:case 12:
        day = 31;
    break;
    case 4:case 6:case 9:case 11:
        day = 30;
    break;
    case 2:
        if(year%4==0 && year%100!=0 || year%400==0){
            day = 29;
        }else{
            day = 28;
        }
    break;
}

System.out.println(year + "年" + month + "月的天数为:" + day + "天");

ifswitch的区别:

  1. 表达式的区别:
    • ifboolean类型
    • switchbyteshortintcharString(JDK1.8)、枚举(JDK1.5)
  2. 应用场景的区别:
    • if:判断区间、判断复杂条件
    • switch:判断单个值是否相同

for循环

语法规则

for(表达式1;表达式2;表达式3){
    ...代码块/循环体...
}

理解:

  • 表达式1:初始化变量
  • 表达式2:条件判断
  • 表达式3:更新变量

执行步骤:

  1. 初始化变量
  2. 判断条件-结果必须是boolean类型
    1. true-执行代码块,更新变量,重复第二个步骤
    2. false-直接跳出循环体
需求1:打印1~10的数字
    for(int i = 1;i<=10;i++){
        System.out.println(i);
    }

需求2:打印1~10的奇数数字
    for(int i = 1;i<=10;i+=2){
        System.out.println(i);
    }

需求3:打印10~1的数字
    for(int i = 10;i>=1;i--){
        System.out.println(i);
    }

需求4:打印10~1的偶数数字
    for(int i = 10;i>=1;i-=2){
        System.out.println(i);
    }

for循环变形

int i = 0;
for(;i<5;){
    System.out.println("我爱你 -- " + i);
    i++;
}
System.out.println(i);
//我爱你 -- 0
//我爱你 -- 1
//我爱你 -- 2
//我爱你 -- 3
//我爱你 -- 4
//5

死循环

for(;;){
    System.out.println("死循环");
}

for(;true;){
    System.out.println("死循环");
}

伪死循环

for(int i = 0;i>=0;i++){
    System.out.println("伪死循环");
}

案例:循环录入5次int类型的数字,输出最大值

Scanner scan = new Scanner(System.in);
System.out.println("请输入第1个数字")int max = scan.nextInt();//假设输入的第一个值为最大值

for(i=2;i<=5;i++){
    System.out.println("请输入第"+i+"个数字")int nem = scan.nextInt();
    if(max<num){
        max=num;
    }
    System.out.println("最大的数字为" + max)
}

for循环嵌套

需求:打印以下图形

****

****

****

for(int i = 0;i<3;i++){
    for(int j = 0;j<4;j++){
        System.out.print("*");
    }
    System.out.println();
}

小结:

  1. 初始化变量不一定要从0开始
  2. 变量更新大小视情况而定
  3. for循环中声明的变量只能在在当前for循环中使用
  4. for循环里面的更新变量中编写i++++i没有区别

for嵌套循环

/*需求1:打印以下图形
    **** i=0 (j=0,1,2,3)
    **** i=1 (j=0,1,2,3)
    **** i=2 (j=0,1,2,3)*/
    for(int i = 0;i<3;i++){
        for(int j = 0;j<4;j++){
            System.out.print("*");
        }
        System.out.println();
    }

/*需求2:打印以下图形
    *		i=0 (j=0)
    **		i=1 (j=0,1)
    ***		i=2 (j=0,1,2)
    ****	i=3 (j=0,1,2,3)
    *****	i=4 (j=0,1,2,3,4)
    */
    for(int i = 0;i<5;i++){
        for(int j = 0;j<=i;j++){
            System.out.print("*");
        }
        System.out.println();
    }

/*需求3:打印以下图形
        *
       **
      ***
     ****
    *****
*/
    for(int i = 0;i<5;i++){
        for(int k = 0;k<4-i;k++){
            System.out.print(" ");
        }
        for(int j = 0;j<=i;j++){
            System.out.print("*");
        }
        System.out.println();
    }

/*需求4:打印以下图形
    *****
    ****
    ***
    **
    *
*/
    for(int i = 0;i<5;i++){
        for(int j = 0;j<5-i;j++){
            System.out.print("*");
        }
        System.out.println();
    }

/*需求5:打印以下图形
    *****
     ****
      ***
       **
        *    
 */
    for(int i = 0;i<5;i++){
        for(int k = 0;k<i;k++){
            System.out.print(" ");
        }
        for(int j = 0;j<5-i;j++){
            System.out.print("*");
        }
        System.out.println();
    }

/*需求6:打印以下图形
       *      i = 0
      ***     i = 1
     *****    i = 2
    *******   i = 3    
 */
    for(int i = 0;i<4;i++){
        for(int k = 0;k<3-i;k++){
            System.out.print(" ");
        }
        for(int j = 0;j<i*2+1;j++){
            System.out.print("*");
        }
        System.out.println();
    }

/*需求7:打印以下图形
       *
      * *
     *   *
    *******    
 */
    for(int i = 0;i<4;i++){
        for(int k = 0;k<3-i;k++){
            System.out.print(" ");
        }
        for(int j = 0;j<i*2+1;j++){
            if(i==0 || i==3 || j==0 || j== i*2){//第一行、最后一行、每行第一列、每行最后一列
                System.out.print("*");
            }else{
                System.out.print(" ");
            }
        }
        System.out.println();
    }

/*需求8:打印以下图形
    *******
     *****
      ***
       *    
 */
    for(int i = 0;i<4;i++){
        for(int k = 0;k<i;k++){
            System.out.print(" ");
        }
        for(int j = 0;j<7-i*2;j++){
            System.out.print("*");
        }
        System.out.println();
    }

/*需求9:打印以下图形
    *******
     *   *
      * *
       *    
 */
    for(int i = 0;i<4;i++){
        for(int k = 0;k<i;k++){
            System.out.print(" ");
        }
        for(int j = 0;j<7-i*2;j++){
            if(i==0 || i==3 || j==0 || j== 7-i*2-1){//第一行、最后一行、每行第一列、每行最后一列
                System.out.print("*");
            }else{
                System.out.print(" ");
            }
        }
        System.out.println();
    }   

/*需求10:九九乘法表 */
 //解决方案一:    

        for(int i = 1;i<=9;i++){	
            for(int j = 1;j<=i;j++){
                System.out.print(j + "x" + i + "=" + (i*j) + "\t");
            }
            System.out.println();
        }

 //解决方案二:    
        for(int i = 1;i<=9;i++){
            for(int k = 1;k<i;k++){
                System.out.print("\t");
            }
            for(int j = i;j<=9;j++){
                System.out.print(i + "x" + j + "=" + (i*j) + "\t");
            }
            System.out.println();
        }

while循环

语法结构

while(表达式){
    ...代码块...
}

理解:表达式内的类型必须是boolean类型,true执行循环体,false不执行

死循环

while(true){
    System.out.println("死循环");
}

案例:每个月存3000,每年增加1000,多少个月后到20万?

int allMoney = 0;
int money = 3000;
int month = 0;

while(allMoney < 200000){
    allMoney += money;
    month++;
    if(month % 12 == 0){
        money+=1000;
    }
}

System.out.println(month + "个月后存满20万");
System.out.println(money);

小结while可以做到for的功能

do-while循环

语法结构

do{
    ...代码块...
}while(表达式);

理解:先执行代码块一次,再判断

案例:唐亮参加学校组织的歌咏比赛,大赛在即,老师建议:先彩排一次,如果很令人满意,以后就不用彩排了,否则每天都排,直到现场表现满意为止!

Scanner scan = new Scanner(System.in);

String str;
do{
    System.out.println("成龙:\"旋转、跳跃,我闭着眼~~~\"");
    System.out.println("成龙:\"老师,您满意了吗?\"");
    str = scan.next();

}while(str.equals("不满意"));

小结:

  1. do-while先执行一遍代码块再判断
  2. 在循环内部声明的变量不能在外部使用

for vs while vs do-while

语法区别

  • for循环

    for(初始化变量;判断条件;更新变量){}
    
  • while循环

    while(判断条件){}
    
  • do-while循环

    do{}while(判断条件);
    

==注意:==三大循环的判断条件,如果是true就执行代码块,如果是false就跳出循环

执行顺序区别

  • for:先初始化变量 > 判断条件 > 执行代码 > 更新变量
  • while:先判断,在执行
  • do-while:先执行一遍,再判断

应用场景区别

  • for:循环次数确定时
  • while:循环次数不确定时
  • do-while:循环次数不确定时,先执行一遍,再判断

特殊的流程控制语句

break

理解:作用于循环中,表示跳出/结束当前循环

案例:循环录入麻生希同学5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示

Scanner scan = new Scanner(System.in);

boolean flag = true;//true-正常录入   false-非正常录入

double sum = 0;
for(int i = 1;i<=5;i++){
    System.out.println("请输入第" + i + "门成绩:");
    double score = scan.nextDouble();
    if(score < 0){
        flag = false;
        break;
    }
    sum += score;
}

if(flag){
    double avg = sum/5;
    System.out.println("平均分为:" + avg);
}else{
    System.out.println("分数为负数,停止录入");
}

continue

理解:作用于循环中,表示跳过循环体剩余部分,进入到下一次循环中

案例:循环录入Java课5名学生的成绩,统计分数大于等于80分的学生比例。

Scanner scan = new Scanner(System.in);

int count = 0;//分数大于等于80分的学生个数

for(int i = 1;i<=5;i++){
    System.out.println("请输入第" + i + "名学生的成绩:");
    double score = scan.nextDouble();
    if(score<80){
        continue;
    }
    count++;
}

double proportion = count/5.0*100;
System.out.println("成绩大于等于80分学生的比例为:" + proportion + "%");

return

理解:作用于方法中,表示结束当前方法

案例:结束主函数

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

        System.out.println("111");
        System.out.println("222");
        if(true){
            return;
        }
        System.out.println("333");
    }
}

label

理解:为循环取名/标记

案例:外层循环5次、内层循环3次、当外层循环到第2次时,在内层循环中关闭掉外层循环

public class Demo{
	public static void main(String[] args){
		
		a:for(int i = 1;i<=5;i++){
			for(int j = 1;j<=3;j++){
				System.out.println(i + " -- " + j);
				if(i == 2){
					break a;//跳出指定循环
				}
			}
		}
	}
}

面试题:下面代码编译是否会出错?

public class Demo{
	public static void main(String[] args){
		//面试题:以下代码是否会报错?
		//答案:不会
		https://www.baidu.com/
		for(int i = 1;i<=5;i++){
			System.out.println("刘亦菲爱我");
		}
	}
}

万年历

已知:1990年1月1日为星期一

思路:打印需要的数据:年份、月份、当月天数、当月第一天是星期几?

import java.util.Scanner;
public class Demo{
	public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入年:");
		int year = scan.nextInt();
		System.out.println("请输入月:");
		int month = scan.nextInt();
		
		//当月天数
		int day = 0;
		switch(month){
			case 1:case 3:case 5:case 7:case 8:case 10:case 12:
				day = 31;
			break;
			case 4:case 6:case 9:case 11:
				day = 30;
			break;
			case 2:
				if(year%4==0 && year%100!=0 || year%400==0){
					day = 29;
				}else{
					day = 28;
				}
			break;
		}
		
		//计算总天数 -- 1900.1.1 ~ 输入年输入月的第一天
		
		
		//计算年的总天数 -- 1900(包含)~输入年(排他)
		int allDayOfYear = 0;
		for(int i = 1900;i<year;i++){
			if(i%4==0 && i%100!=0 || i%400==0){
				allDayOfYear += 366;
			}else{
				allDayOfYear += 365;
			}
		}
		
		//计算月的总天数 -- 1~输入月
		int allDayOfMonth = 0;
		for(int i = 1;i<month;i++){
			switch(i){
				case 1:case 3:case 5:case 7:case 8:case 10:case 12:
					allDayOfMonth += 31;
				break;
				case 4:case 6:case 9:case 11:
					allDayOfMonth += 30;
				break;
				case 2:
					if(year%4==0 && year%100!=0 || year%400==0){
						allDayOfMonth += 29;
					}else{
						allDayOfMonth += 28;
					}
				break;
			}
		}
		
		//合并总天数
		
		//1900.1.1 -- 2024.6.1
		int allDay = allDayOfYear + allDayOfMonth + 1;
		
		//计算星期
		int week = allDay%7;//0~6
		if(week == 0){
			week = 7;
		}
		
		//打印日历
		
		System.out.println(" --- " + year + "年" + month + "月 ---");
		System.out.println("一\t二\t三\t四\t五\t六\t日");
		
		int count = 0;
		
		for(int i = 1;i<week;i++){
			System.out.print("\t");
			count++;
		}
		
		for(int i = 1;i<=day;i++){
			System.out.print(i + "\t");
			count++;
			if(count % 7 == 0){
				System.out.println();
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖把湛屎,戳谁谁死

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值