顺序结构
从上往下执行
分支结构
- if else
- 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 只执行一次。初始化
- 判断表达式2是否为真;
- 若为真,执行循环体;
- 执行表达式3。
第二趟:
- 判断表达式2是否为真;
- 若为真,执行循环体;
- 执行表达式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死循环
问题:
- 如果表达式2,没有for循环 为什么可以进入循环语句?------------如果没有表达式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
恭喜你!你猜对了!!!