4.1 if语句
1.if的第一种格式
1.格式:
if(boolean表达式){
执行语句;
}
2.执行流程:先判断if后的boolean表达式,如果是true,执行大括号中的执行语句,否则不执行
注意:if后的boolean表达式,只要结果为boolean类型,都可以放在小括号中,哪怕是一个true或false
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.格式:
if(boolean表达式){
执行语句1;
}else if(boolean表达式){
执行语句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:
执行语句1;
break;
case 变量2:
执行语句2;
break;
case 变量3:
执行语句3;
break;
...
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;
}
switch和if的区别:
1)debug
2)switch:会直接跳到相匹配的case
3)if:从上到下挨个判断
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
练习六:输出1到100之间能被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整除的数是3
第2个能被3整除的数是9
第3个能被3整除的数是18
第4个能被3整除的数是30
第5个能被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();
}
}
}
运行结果:
*
**
***
****
*****
******
知识点分享,有不足的地方望广大学友指点