今天学习了更多的Java知识,明白了Java之间的逻辑关系。
逻辑运算符
&&
、
||
、
!
注意:逻辑计算支持短路操作
表达多个条件之间的关系。例如年龄大于等于
18
并且年龄小于
65
&&:
与运算,含义是两个条件必须同时成立,可以翻译为并且
1
加仑
(
美
)
=
3.785 412
升
Scanner sc
=
new
Scanner
(
System
.
in
);
System
.
out
.
print
(
"
请输入升数
:"
);
double
d
=
sc
.
nextDouble
();
double
g
=
d
/
3.785412
;
g
=
g
*
10000
+
0.5
;
g
=
(
int
)
g
/
10000.
;
如果写成
(
int
)
g
/
10000
结果一定是没有小数
,
因为参与运算的双方是整数,所以除法是
整除运算
System
.
out
.
println
(
d
+
"
升等于
"
+
g
+
"
加仑
"
);
C = 5×(F- 32)/9
Scanner sc = new Scanner(System.in);
System.out.println("
请输入华氏温度值
:");
double f = sc.nextDouble();
// C = 5×(F- 32)/9
double cc = 5 * (f - 32) / 9;
//
额外要求:只输出整数
System.out.println("
华氏
" + (int) f + "
等于摄氏
" + (int) cc);
1
英亩
=4046.864798
平方米
1
、将英亩转换为平方米
2
、平方米
/1.2
获取小时数
3
、将小数部分的小时值转换为分钟和秒
int num = 5;
double pfm = num * 4046.864798;
double h = pfm / 1.2;
int hour = (int) h;
double n2 = (h - hour) * 60;
int min = (int) n2;
n2 = (n2 - min) * 60;
int sec = (int) n2;
sec = sec + 1;
System.out.println("
吃完
" + num + "
英亩草地需要的时间为
" + hour + "
小时
" + min + "
分
钟
" + sec + "
秒
");
年龄大于等于
18
并且年龄小于
65
age>=18 && age<65
算法规则:同真则真,其余为假
||
:或运算,含义是两个条件中成立一个即可,可以翻译为或者
年龄小于
18
岁或者年龄不小于
65
age<18 || age>=65
算法规则:同假则假,否则为真
!
:非运算,含义是不是,用于对某个条件进行否定
年龄不小于
18
写法
1
:
age >=18
写法
2
:
!
(
age<18
)
算法规则:非真则假,非假则真
短路运算
[
考试
,
难度
2
星
]
例如
A && B:
如果条件
A
为
false,
则不会执行
B
,因为根据运算规则结果一定是
false
,和
B
的值没有关系
A||B
:如果条件
A
为
true
,则不会执行
B
,因为格局运算规则结果一定是
true
,和
B
的值没有关系
考核中主要配置
++/--
进行测试
int
age
=
100
;
char
cc
=
'A'
;
if
(
cc
>=
'B'
||
age
++<
200
){
System
.
out
.
println
(
"ZZZZZ"
);
}
System
.
out
.
println
(
age
);
//?
输出
101
int
age
=
100
;
char
cc
=
'A'
;
if
(
cc
>=
'B'
&&
age
++<
200
){
System
.
out
.
println
(
"ZZZZZ"
);
}
System
.
out
.
println
(
age
);
//?
输出
100,
因为短路的原因,导致
age++
并没有得到执行
int
age
=
200
;
char
cc
=
'A'
;
if
(
cc
>=
'B'
||
age
++<=
200
){
System
.
out
.
println
(
"ZZZZZ"
);
System
.
out
.
println
(
age
);
//?
输出
201
}
赋值运算符
=
,
+=
,
-=
,
*=
,
/=
,
%=
int k=100;
含义是将
100
赋值存储在
k
对应的存储单元中
k=k+3
可以简写为
k+=3 -= */ /=
类似
考点【难度系数
3
】
结构化编程
结构化程式设计
(
英语
:Structured programming)
是
1960
年代开始发展起来的一种编程典范。它采用子
程序、程式码区块、
for
循环以及
while
循环等结构来取代传统的
goto
。
指导思想
自顶向下、逐步求精、模块化
编程过程
流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过
程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。
常见的绘制工具有
Visio
、
PowerDesigner
等。
1
、圆角矩形表示
“
开始
”
与
“
结束
”
。
2
、矩形表示行动方案、普通工作环节用
3
、菱形表示问题判断或判定(审核
/
审批
/
评审)环节
4
、用平行四边形表示输入输出
5
、箭头代表工作流方向
short
k
=
3
;
k
=
k
+
3
;
//
出现了一个语法错误,因为
k+3
这里的
3
系统识别为
int
类型,所以计算时所有数据自动转换为
int
类型,必然计算结果也是
int
类型,将
int
类型的数据赋值给
short
类型变量
----
错误
System
.
out
.
println
(
k
);
short
k
=
3
;
k
+=
3
;
//
没有语法错误,因为
+=
这种符号中包含了自动类型转换
推荐工具:
ProcessOn
支持流程图、思维导图、原型图、
UML
、网络拓扑图、组织结构图等
结构化编程的推论
任何复杂的问题都可以三种基本算法结构来描述:顺序、选择、循环。因此用计算机语句描述的程序也
包含三种基本结构
条件分支语句
Java
语言提供了两种判断语句:
if
语句和
switch
语句。这两种语句用于实现判断,当符合某些条件时执行
某段代码,否则将不执行
语法
if(
条件判断语句
){
代码
A;}
当条件成立时执行代码
A
,如果条件不成立则不执行代码
A
,而是直接
执行
if
的下一句
if(
条件
){
代码块
1;}else{
代码块
2;}
当条件成立时执行代码块
1
,如果条件不成立则执行代码块
2
。没
有一种情况是同时执行代码块
1
和
2
if(
条件
1){
代码块
1;}else if(
条件
2){
代码块
2;}...else{
代码块
n;}
当条件
1
成立时执行代码块
1
,如果条
件
1
不成立继续判断条件
2
,如果条件
2
成立则执行代码块
2,
依次类推。没有一种情况是同时执行代
码块
1
和
2
说明:允许多个
if之间进行相互嵌套
要求输入学生成绩(假设成绩都是整数),如果
>=85
显示优秀,如果
>=70
显示良好,如果
>=60
显示及
格,否则显示不及格
修改代码
开关分支语言
switch
语法:
switch(
表达式
){
case
值
1
:
判断表达式的值是否在值
1
,如果相等则执行代码块
1
代码块
1
;
break;
执行完成后,如果没有
break
,则自动执行后续语句,但是不进行判
定。如果有
break
则立即中断
switch
的执行,跳到
switch
块的下一局继续执行
多个
case
语句
:
... ...
default:
如果所有的
case
都不能成立,则执行代码块
n
代码块
n; break;
}
Scanner sc
=
new
Scanner
(
System
.
in
);
int
score
=
sc
.
nextInt
();
if
(
score
>=
60
) {
System
.
out
.
println
(
"
成绩及格
"
);
}
else
{
System
.
out
.
println
(
"
成绩不及格
"
);
}
Scanner sc
=
new
Scanner
(
System
.
in
);
int
score
=
sc
.
nextInt
();
if
(
score
>=
85
) {
//
这里的顺序不能调整,因为条件成立后则立即执行代码块,执行结束则自动跳出
if
,不会继续判断
System
.
out
.
println
(
"
成绩优秀
"
);
}
else if
(
score
>=
70
) {
System
.
out
.
println
(
"
成绩良好
"
);
}
else if
(
score
>=
60
){
System
.
out
.
println
(
"
成绩及格
"
);
}
else
{
System
.
out
.
println
(
"
成绩不及格
"
);
}
if
(
score
>
70
) {
System
.
out
.
println
(
"
良好
"
);
}
else if
(
score
>
85
) {
//
这里的代码永远不会有执行机会。因为这里的
if
条件实际上是一个复合
条件,
if(score<=70 && score>85){}
System
.
out
.
println
(
"
优秀
"
);
}
else if
(
score
>
60
) {
//score<=70 && score<=85 && score>60
System
.
out
.
println
(
"
及格
"
);
}
else
{
System
.
out
.
println
(
"
不及格
"
);
}
语法点:
表达式的计算结果可以是整型【不允许
long
类型】
,
可以是
char
,同时允许是字串类型
[String]
也可以是枚举类型
case
值类型必须和
switch
条件类型相同或者能隐式转换为
switch
表达式类型
case
值必须唯一,不能与其它的重复
default
的位置没有特殊要求,但是一定是所有的
case
值不相等时才会执行。但是为了增强可读
性,所以一般建议写在所有的
case
之后
需求:输入月份,显示对应的本月的天数
三目运算符
三目条件运算符(?:)规则是完全一致的,使用的形式是:
x ? y
:
z;
需求:要求输入两个整数,输出最大的整数
使用
if
判断的实现方式:
System
.
out
.
println
(
"
请输入月份
:"
);
Scanner sc
=
new
Scanner
(
System
.
in
);
int
m
=
sc
.
nextInt
();
switch
(
m
) {
case
1
:
case
3
:
case
5
:
case
7
:
case
8
:
case
10
:
case
12
:
System
.
out
.
println
(
"
本月
31
天
"
);
break
;
case
2
:
System
.
out
.
println
(
"
请输入年份
:"
);
int
year
=
sc
.
nextInt
();
if
((
year
%
4
==
0
&&
year
%
100
!=
0
)
||
year
%
400
==
0
) {
System
.
out
.
println
(
"
本月
29
天
"
);
}
else
System
.
out
.
println
(
"
本月
28
天
"
);
break
;
case
4
:
case
6
:
case
9
:
case
11
:
System
.
out
.
println
(
"
本月
30
天
"
);
break
;
default
:
//default
写在
switch
内部的任何位置上实际都不会影响执行逻辑,但是不建议,
因为会影响可读性
System
.
out
.
println
(
"
月份错误
!"
);
break
;
}
}
}
public class
Test8
{
public static
void
main
(
String
[]
args
) {
Scanner sc
=
new
Scanner
(
System
.
in
);
使用三目运算符实现
要求表达式
1
必须返回值为
boolean
类型
要求表达式
2
和表达式
3
的返回值类型一致
Object max = num1 > num2 ? num1 : "num2"
;
题目
循环结构
循环就是重复做某一件事情。在
Java
程序中,循环控制即在某一情况下,控制程序重复执行某一条或多
条语句,直到遇到终止条件为止
循环语句也称迭代语句,在
Java
语言中存在的
while
、
for
和
do-while
循环语句
需求:计算
1+2+3+...+100=5050
while
循环
while
是
Java
中最基本的循环语句,满足条件才执行循环体,如果不满足条件则不执行。所以有可能循环
体一次都不执行。
语法:
System
.
out
.
println
(
"
请输入第一个整数
:"
);
int
num1
=
sc
.
nextInt
();
System
.
out
.
println
(
"
请输入第二个整数
:"
);
int
num2
=
sc
.
nextInt
();
int
max
=
num1
;
if
(
max
<
num2
)
max
=
num2
;
System
.
out
.
println
(
"
两个整数
("
+
num1
+
","
+
num2
+
")
中最大的值为
:"
+
max
);
sc
.
close
();
}
}
Scanner sc
=
new
Scanner
(
System
.
in
);
System
.
out
.
println
(
"
请输入第一个整数
:"
);
int
num1
=
sc
.
nextInt
();
System
.
out
.
println
(
"
请输入第二个整数
:"
);
int
num2
=
sc
.
nextInt
();
/*
* if(num1>num2) max=num1;
* else max=num2;
*/
int
max
=
num1
>
num2
?
num1
:
num2
;
System
.
out
.
println
(
"
两个整数
("
+
num1
+
","
+
num2
+
")
中最大的值为
:"
+
max
);
sc
.
close
();
do/while
循环
语法:
do{
循环体
;
}while(
条件
)
;
先执行循环体,然后进行条件判断,如果条件为
true
,则执行下次循环;如果
条件为
false
则终止循环。
不同于
while
循环的点:
do/while
循环至少执行循环体一次,而
while
循环有可能一次都不执行
.
for
循环
语法:
for(
表达式
1
;表达式
2
;表达式
3){
循环体
;}
执行表达式
1
执行表达式
2
,一般表达式
2
是一个条件,如果条件为
true
则执行循环体;如果条件为
false
则终止循
环
执行循环体
执行表达式
3
执行第
2
步骤
for
循环一般用于可以明确循环次数的场景中;
while
循环一般用于不能预先确定循环执行次数的场景
中;
do/while
循环一般用于不能预先确定循环执行次数,同时要求循环体至少执行一次的场景中
int
res
=
0
;
int
k
=
0
;
while
(
true
){
if
(
++
k
>
100
){
break
;
//
跳出循环体,执行循环体后的语句
}
if
(
k
%
2
==
0
){
//
如果是偶数不进行累加操作,而是从新开始后续的循环,
continue
之后的语句不执
行,从头开始下次循环
continue
;
//
终止本次循环,立即进入下次循环
}
else
{
res
+=
k
;
//res=res+k
}
System
.
out
.
print
(
k
+
"+"
);
}
System
.
out
.
println
(
"="
+
res
);
int
res
=
0
;
int
k
=
1
;
do
{
res
+=
k
++
;
//res=res+k;k++;
}
while
(
k
<
101
);
System
.
out
.
println
(
res
);
省略表达式的写法
练习题:
1
、计算输入数据的阶乘值
2
、互换两个数的值(不允许使用中间变量)
建立临时变量
加减运算交换
位运算方法
3
、输出三个数中的最大值和最小值
4
、输出
1-100
的奇数
(
每行输出
6
个
)
5
、
1-100
求和
(for while
以及
do/while
的写法
)
6
、
1-100
奇数求和
7
、
1~100
可以被
3
整除的数
8
、求
100
以内所有能被
3
整除但不能被
5
整除的个数
int
res
=
0
;
for
(
int
i
=
1
;
i
<=
100
;
i
++
){
res
+=
i
;
}
System
.
out
.
println
(
res
);
int
k
=
1
;
for
(;
k
<
101
;
k
++
)
res
+=
k
;
int
k
=
1
;
for
(;
k
<
101
;)
res
+=
k
++
;