目录
顺序结构
顺序结构
比较简单,按照代码书写的顺序一行一行执行。
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
/*运行结果
aaa
bbb
ccc
*/
如果调整代码的书写顺序
,
则执行顺序也发生变化
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
/*运行结果
aaa
ccc
bbb
*/
分支结构
1.if 语句
1.1 语法格式1 判断
if(布尔表达式){
// 语句
}
如果布尔表达式结果为
true
,执行
if
中的语句,否则不执行。
实例:
int score = 92;
if(score >= 60){
System.out.println("分数及格");
}
1.2 语法格式2 分支
if(布尔表达式){
// 语句1
}else{
// 语句2
}
如果布尔表达式结果为
true
,则执行
if
中语句,否则执行
else
中语句。
int score = 49;
if(score >= 60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
1.3 语法格式3 多分支
if(布尔表达式1){
// 语句1
}else if(布尔表达式2){
// 语句2
}else{
// 语句3
}
表达式
1
成立,执行语句
1
,否则判断表达式
2
成立,执行语句
2
,语句1,2都不成立 执行语句
3
//判断数字是正数还是负数
int num = 10;
if (num>0){
System.out.println("num是正数");
}else if (num<0){
System.out.println("num是负数");
}else{
System.out.println("num是0");
}
1.4 特殊问题
int x = 20;
if (x == 10);
{
System.out.println("hehe");
}
// 运行结果
hehe
注意上面代码 if 语句后的分号,表示整个 if 语句体的结束,括号内容是另外语句 与 if 判断无关
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
if / else
语句中可以不加 大括号
.
但是也可以写语句
(
只能写一条语句
).
此时 else 是和最接近的 if 匹配.
但是实际开发中我们
不建议
这么写
.
最好加上大括号
2.switch 语句
switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
执行流程:
先计算表达式的值
再和
case的值
依次比较,一旦有相应的值匹配就执行该项case下的语句,直到遇到
break
时结束整个switch语句
当表达式的值没有与所列项匹配时,执行
default
实例:
int num = 1;
switch(num) {
case 1 :
System.out.println("num是1");
break;
case 2 :
System.out.println("num是2");
break;
default:
System.out.println("num是其他数字");
break;
}
注意:
case后只能是常量值,不能是布尔类型
多个
case
后的常量值不可以重复。
switch
的括号内只能是以下类型的表达式:
基本类型:
byte
、
char
、
short
、
int
,注意不能是
long类型
引用类型:
String
常量串、枚举类型
double num = 1.0;
switch(num) {
case 1.0:
System.out.println("hehe");
break;
case 2.0:
System.out.println("haha");
break;
}
// 编译出错
Test.java:4: 错误: 不兼容的类型: 从double转换到int可能会有损失
switch(num) {
^
1 个错误
break
不要遗漏
,
否则会失去
"
多分支选择
"
的效果
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
break;
}
// 运行结果
星期一
星期二
switch
虽然支持嵌套
,
但是结构臃肿,一般不推荐
switch
不能表达复杂的条件 如 1<num<9 时输出ok 使用 if 语句即可表示 使用switch不能表示
if (num > 1 && num < 9) {
System.out.println("ok");
}
循环结构
1.while 循环
基本语法格式
:
while(循环条件){
循环语句;
}
循环条件为
true,
则执行循环语句
;
否则结束循环
.
实例:打印
1 - 10
的数字
int num = 1;
while (num <= 10) {
System.out.println(num);
num++;
}
实例:计算1到100的和
int n = 1;
int result = 0;
while (n <= 100) {
result += n;
n++;
}
System.out.println(num);
// 执行结果 5050
实例:计算5的阶乘
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(num);
// 执行结果 120
实例:计算1!+2!+3!+4!+5!
思路:sum表示阶乘相加的和,num表示要阶乘的每个数,从1-5自增,计算到5的阶乘结束
int num = 1;
int sum = 0;
// 外层循环负责求阶乘的和
while (num <= 5) {
int factorResult = 1;
int tmp = 1;
// 里层循环负责完成求阶乘的细节.
while (tmp <= num) {
factorResult *= tmp;
tmp++;
}
sum += factorResult;// sum = 1*1 + 1*2 + 1*2*3 + 1*2*3*4 + 1*2*3*4*5
num++;
}
System.out.println("sum = " + sum);
和
if
类似
, while
下面的语句可以不写
{ } ,
但是不写的时候只能支持一条语句
.
建议还是加上
{ }
和
if
类似
, while
后面的
{
建议和
while
写在同一行
.
和
if
类似
, while
后面不要多写 分号
,
否则可能导致循环不能正确执行
.
int num = 1;
while (num <= 10); {
System.out.println(num);
num++;
}
// 执行结果
[无任何输出, 程序死循环]
以上代码while
的语句体
(
这是一个空语句
),
实际的
{ }
部分和循环无关
.
此时循环条件
num <= 10
恒成立
,
导致代码死循环
2. break
break
的功能是让循环提前结束
.
实例:找到
100 - 200
中第一个
3
的倍数
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;// 执行到 break 就会让循环结束.
}
num++;
}
// 执行结果
找到了 3 的倍数, 为:102
3.continue
continue
的功能是跳过这次循环
,
立即进入下次循环
.
实例:找到 100 - 200
中所有
3
的倍数
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;//continue直接跳到下一次while循环 如100满足if语句 自增到101直接跳到下次while
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
执行到
continue
语句的时候
,
就会立刻进入下次循环
(while
判定循环条件
),
从而不会执行到下方的打印语句
4.for 循环
for(表达式1;布尔表达式2;表达式3){
表达式4;
}
表达式
1:
用于初始化循环变量初始值,在循环最开始时执行,且只执行一次
表达式
2:
循环条件,满足则循环继续,否则循环结束
表达式
3:
循环变量更新方式(自增或自减)
执行过程:1-2-3-4, 2-3-4, 2-3-4 .... 2-3-4 ....循环结束
实例:输出
1 - 10
的数字
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
实例:计算 1 - 100
的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
// 执行结果
5050
实例:计算 5 的阶乘
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
实例:计算 1! + 2! + 3! + 4! + 5!
int sum = 0;
for (int i = 1; i <= 5; i++) { // i从1-5变化 实现要阶乘的每个数字的变化
int tmp = 1;
for (int j = 1; j <= i; j++) { // j实现具体阶乘
tmp *= j;
}
sum += tmp;// 阶乘的相加和
}
System.out.println("sum = " + sum);
注意:
和
if
类似
, for
下面的语句可以不写
{ } ,
但是不写的时候只能支持一条语句
.
建议还是加上
{ }
和
if
类似
, for
后面的
{
建议和
while
写在同一行
.
和
if
类似
, for
后面不要多写 分号
,
否则可能导致循环不能正确执行
.
和
while
循环一样,结束单趟循环用
continue
,结束整个循环用
break
5.do while 循环
do{
循环语句;
}while(循环条件);
先执行一次循环语句
,
再判定循环条件,循环条件成立则继续执行,否则循环结束
实例:输出1-10
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 10);
注意:
do while
循环最后的分号不要忘记
一般
do while
很少用到
,
更推荐使用
for
和
while
输入输出
1.输出到控制台
System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出
println
输出的内容自带
\n,
print
不带
\n
printf
的格式化输出方式和
C
语言的
printf
是基本一致的
.
System.out.println("hello world");
int x = 10;
System.out.printf("x = %d\n", x)// x以十进制输出并换行
2.格式化字符串
转换符 | 类型 | 举例 | 输出 |
d |
十进制整数
|
("%d", 100)
| 100 |
x |
十六进制整数
|
("%x", 100)
| 64 |
o |
八进制整数
|
("%o", 100)
| 144 |
f |
定点浮点数
|
("%f", 100f)
| 100.000000 |
e |
指数浮点数
|
("%e", 100f)
| 1.000000e+02 |
g | 通用浮点数 |
("%g", 100f)
| 100.000 |
a |
十六进制浮点数
|
("%a", 100)
| 0x1.9p6 |
s |
字符串
|
("%s", 100)
| 100 |
c |
字符
|
("%c", ‘1’)
| 1 |
b |
布尔值
|
("%b", 100)
| true |
h |
散列码
|
("%h", 100)
| 64 |
% | 百分号 |
("%.2f%%", 2/7f)
.2是保留两位2/7的值
|
0.29%
|
3.从键盘输入
运行一段程序,可以在电脑上输出结果,那么怎么输入一段内容让程序接收呢?
使用
Scanner
读取字符串
/
整数
/
浮点数
import java.util.Scanner; // 使用scanner需要导入 util 包
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(); // 注意, 要记得调用关闭方法
// 执行结果
请输入你的姓名:
张三
请输入你的年龄:
18
请输入你的工资:
1000
你的信息如下:
姓名: 张三
年龄:18
工资:1000.0
实例:使用 Scanner 循环读取 N 个数字,并求取其平均
Scanner sc = new Scanner(System.in);
int sum = 0;
int num = 0;
while (sc.hasNextInt()) {
int tmp = sc.nextInt();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
// 执行结果
10
40.0
50.5
^Z
sum = 150.5
avg = 30.1
当循环输入多个数据的时候
,
使用
ctrl + z
来结束输入
(Windows
上使用
ctrl + z, Linux / Mac
上使用
ctrl + d)