03 JavaSE—程序逻辑控制
Posted /少司命
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03 JavaSE—程序逻辑控制相关的知识,希望对你有一定的参考价值。
目录
6,计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。
一,写在前面
如果你对Java感兴趣,那么你可以关注我这个小博主,你信任我,我也会提升我博客的质量,最好是保姆级教学,保证就算你是小白看过我的博客后,你也能学的懂,当然你最起码要懂一点最基本的编程语言知识。如果你认为本篇博客写的不错的话,求点赞,求评论,求收藏。
二,顺序结构
顺序结构比较简单. 像我们之前写过的代码就是顺序结构的, 按照代码书写的顺序一行一行执行。
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
}
如果调整代码的书写顺序, 则执行顺序也发生变化
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
}
三,分支结构
1,if 语句
基本语法形式1
if(布尔表达式){
//条件满足时执行代码
}
基本语法形式2
if(布尔表达式){
//条件满足时执行代码
}else{
//条件不满足时执行代码
}
基本语法形式3
if(布尔表达式){
//条件满足时执行代码
}else if(布尔表达式){
//条件满足时执行代码
}else{
//条件都不满足时执行代码
}
代码示例1: 判定一个数字是奇数还是偶数
public static void main(String[] args) {
int num = 10;
if (num % 2 == 0) {
System.out.println("num 是偶数");
} else {
System.out.println("num 是奇数");
}
}
代码示例2: 判定一个数字是正数还是负数
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");
}
}
代码示例3: 判定某一年份是否是闰年
public static void main(String[] args) {
int year = 2000;
if (year % 100 == 0) {
// 判定世纪闰年
if (year % 400 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
} else {
// 普通闰年
if (year % 4 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
}
}
悬垂 else 问题
public static void main(String[] args) {
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
}
//书写代码时,尽量在if和else加括号
2,switch 语句
基本语法
switch(整数|枚举|字符|字符串){
case 内容1 : {
内容满足时执行语句;
[break;]
}
case 内容2 : {
内容满足时执行语句;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
代码示例: 根据 day 的值输出星期
public static void main(String[] args) {
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("输入有误");
break;
}
}
根据 switch 中值的不同, 会执行对应的 case 语句. 遇到 break 就会结束该 case 语句. 如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句. 我们建议一个 switch 语句最好都要带上 default。
注意事项1 break 不要遗漏, 否则会失去 "多分支选择" 的效果
public static void main(String[] args) {
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
// break;
case 2:
System.out.println("星期二");
break;
}
}
注意事项2 switch 中的值只能是 整数|枚举|字符|字符串
public static void main(String[] args) {
double num = 1.0;
switch(num) {
case 1.0:
System.out.println("hehe");
break;
case 2.0:
System.out.println("haha");
break;
}
}
注意事项3 switch 不能表达复杂的条件
/ 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.
if (num > 10 && num < 20) {
System.out.println("hehe");
}
三,循环结构
1,while 循环
基本语法格式:
while(循环条件){
循环语句;
}
代码示例1: 打印 1 - 10 的数字
public static void main(String[] args) {
int num = 1;
while (num <= 10) {
System.out.print(" "+num);
num++;
}
}
代码示例2: 计算 1 - 100 的和
public static void main(String[] args) {
int n = 1;
int result = 0;
while (n <= 100) {
result += n;
n++;
}
System.out.println(result);
}
代码示例3: 计算 5 的阶乘
public static void main(String[] args) {
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(result);
}
代码示例4: 计算 1! + 2! + 3! + 4! + 5!
public static void main(String[] args) {
int num = 1;
int sum = 0;
// 外层循环负责求阶乘的和
while (num <= 5) {
int factorResult = 1;
int tmp = 1;
// 里层循环负责完成求阶乘的细节.
while (tmp <= num) {
factorResult *= tmp;
tmp++;
}
sum += factorResult;
num++;
}
System.out.println("sum = " + sum);
}
注意事项
1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.
3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.
int num = 1;
while (num <= 10); {
System.out.println(num);
num++;
}
// 执行结果
[无任何输出, 程序死循环]
2,break
break 的功能是让循环提前结束。
代码示例: 找到 100 - 200 中第一个 3 的倍数
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;
}
num++;
}
}
3,continue
continue 的功能是跳过这次循环, 立即进入下次循环
代码示例: 找到 100 - 200 中所有3 的倍数
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
}
4,for 循环
基本语法
for(表达式1;表达式2;表达式3){
循环体;
}
表达式1: 用于初始化循环变量.
表达式2: 循环条件
表达式3: 更新循环变量
代码示例1: 打印 1 - 10 的数字
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
代码示例2: 计算 1 - 100 的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
// 执行结果
5050
代码示例3: 计算 5 的阶乘
int result = 0;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
代码示例4: 计算 1! + 2! + 3! + 4! + 5!
int sum = 0;
for (int i = 1; i <= 5; i++) {
int tmp = 1;
for (int j = 1; j <= i; j++) {
tmp *= j;
}
sum += tmp;
}
System.out.println("sum = " + sum);
注意事项 (和while循环类似)
1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2. 和 if 类似, for 后面的 { 建议和 while 写在同一行.
3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行.
四,输入输出
1,输出到控制台
基本语法
public static void main(String[] args) {
System.out.println("msg"); // 输出一个字符串, 带换行
System.out.print("msg"); // 输出一个字符串, 不带换行
System.out.printf("format, msg"); // 格式化输出
}
println 输出的内容自带 \\n,
print 不带 \\n printf 的格式化输出方式和 C 语言的 printf 是基本一致的
格式化字符串
转换符 | 类型 | 举例 | |
d | 十进制整数 | ("%d", 100) | 100 |
x | 十六进制整数 | ("%x", 100) | 64 |
f | 定点浮点数 | ("%f", 100) | 100.000000 |
e | 指数浮点数 | ("%e", 100) | 1.000000e+02 |
g | 通用浮点数 | ("%g", 100) | 100.000 |
a | 十六进制浮点数 | ("%a", 100) | 0x1.9p6 |
s | 字符串 | ("%s", 100) | 100 |
c | 字符 | ("%c", 1) | 1 |
b | 布尔值 | ("%b", 100) | true |
h | 散列码 | ("%h", 100) | 64 |
o | 八进制整数 | ("%o", 100) | 144 |
% | 百分号 | ("%.2%%", 2/7f) | 0.29% |
2,从键盘输入
使用 Scanner 读取字符串/整数/浮点数
import java.util.Scanner; // 需要导入 util 包
public class fsfa {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\\n"+"年龄:"+age+"\\n"+"工资:"+salary);
sc.close(); // 注意, 要记得调用关闭方法
}
}
使用 Scanner 循环读取 N 个数字
import java.util.Scanner; // 需要导入 util 包
public class fsfa {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double sum = 0.0;
int num = 0;
while (sc.hasNextDouble()) {
double tmp = sc.nextDouble();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
}
}
五,基础练习
1,年龄分析
根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if(n > 0 && n < 18) {
System.out.println("少年");
}else if(n >= 18 && n < 29) {
System.out.println("青年");
}else if(n >= 29 && n < 56) {
System.out.println("中年");
}else {
System.out.println("老年");
}
}
2,判断一个数是否为素数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i = 2;
for (; i < n; i++) {
if(n % i == 0) {
System.out.println(n+" 不是素数!");
break;
}
}
//2种情况
if( i == n) {
System.out.println(n + " 是素数!");
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i = 2;
for (; i <= n/2; i++) {
if(n % i == 0) {
System.out.println(n+" 不是素数!");
break;
}
}
//2种情况
if( i > n/2) {
System.out.println(n + " 是素数!");
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i = 2;
for (; i <= Math.sqrt(n); i++) {
if(n % i == 0) {
System.out.println(n+" 不是素数!");
break;
}
}
//2种情况
if( i > Math.sqrt(n)) {
System.out.println(n + " 是素数!");
}
}
3,输出 1000 - 2000 之间所有的闰年
public static void main(String[] args) {
for (int year = 1000; year < 2000; year++) {
/*if(year % 100 !=0) {
if(year % 4 == 0) {
System.out.println(year+" 是闰年!");
}
}else {
if(year % 400 == 0) {
System.out.println(year+" 是闰年!");
}
}*/
if(year % 100 != 0 && year % 4 == 0 || year % 400 == 0) {
System.out.println(year+" 是闰年!");
}
}
}
4,输出乘法口诀表
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i ; j++) {
System.out.print(i+"*"+j+"="+i*j+" ");//\\t
}
System.out.println();
}
}
5,求两个正整数的最大公约数
public static void main(String[] args) {
int a = 24;
int b = 18;
int c = a%b;//24 % 18 = 6
while (c != 0) {
a = b;//a = 18
b = c;//b = 6
c = a%b;//0
}
System.out.println("最大公约数是"+b);
}
6,计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。
public static void main(String[] args) {
double sum = 0.0;
int flg = 1;
for (int i = 1; i <= 100 ; i++) {
sum = sum + 1.0/i * flg;
flg = -flg;
}
System.out.println(sum);
}
以上是关于03 JavaSE—程序逻辑控制的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点#JavaSE系列Java程序的选择与轮回——分支结构与循环结构
⭐️JavaSE系列⭐️Java程序的选择与轮回——分支结构与循环结构