变量定义,运算符和分支结构
1. 变量定义
1.1 代码演示
1.2 变量定义错误总结和分析
1.2.1 float变量赋值操作问题
Demo1.java:4: 错误: 不兼容的类型: 从double转换到float可能会有损失
float floatNumber = 3.14;
^
1 个错误
原因:
计算机原则是为了保证数据的完整性,精度,对于空间的存储没有限制。这里所有的浮点数常量在计算机中都会认为是double类型。目前情况下 3.14是一个double类型的常量。但是这里需要将一个double类型的常量,赋值给float类型变量。
这里数据存储空间不对称,需要约束当前3.14为float类型,做到【数据类型一致化】
给3.14常量 ==> 3.14F。明确告知计算机这里3.14是一个float类型
float floatNumber = 3.14; ==> float floatNumber = 3.14F;
1.2.2 long类型变量数据类型一致化要求
开发中要求如果使用一个常量赋值给long类型的变量,需要在该常量之后加入一个大写的L。明确告知计算机,这里是一个long类型数据。
long num = 10L;
1.2.3 字符类型变量操作赋值,必须使用字符本身,不得使用编码值
1.2.4 Java中规定变量未赋值,不得使用,避免没有必要的野值问题
int a;
System . out. println ( a) ;
1.2.5 Java中规定,变量未定义不得使用【常见拼写错误】
System . out. println ( nmu1) ;
2. 运算符
2.1 算术运算符
小学2年级数学知识点
+ - × ÷ ()
注意事项:
1. 优先级括号最高
2. 先乘除后加减
3. 最基本的原则是从左至右计算
4. 除数不得为0
开发中使用的算术运算符:
+ - * / %取余 = 赋值
例如:
针对整数操作
5 ÷ 2 = 2 ...... 1
10 ÷ 12 = 0 ...... 10
= 赋值 是将赋值号右侧的数据,赋值给左侧的【变量】
操作变量和运算符注意事项:
1. 变量里面保存的数据会随着代码的运行发生改变。
2. 目前情况下变量里面保存的内容,有且只有在被赋值号赋值的情况下,才会发生改变
3. 代码运行过程中,如果一个变量没有被赋值号赋值,在整体运行过程中不会发生改变
2.2 偷懒专用算术运算符
int num1 = 10;
int num2 = 20;
偷懒专用算术运算符
+= -= *= /= %=
num1 = num1 + num2; ==> num1 += num2;
class Demo3 {
public static void main ( String [ ] args) {
int num1 = 10 ;
int num2 = 20 ;
num1 = num1 + num2;
num1 = num1 * num2;
num1 = num1 - num2;
num1 = num1 / num2;
num1 = num1 % num2;
num1 *= num2;
System . out. println ( num1) ;
System . out. println ( num2) ;
}
}
2.3 自增自减运算符 [逐步淘汰中…]
[个人建议]
在代码中尽量减少自增自减运算符使用。
1. 替代品 += 1 -= 1
2. 解决方案 自增自减运算符单独成行
Apple公司 iOS开发语言 Swift 已经淘汰自增自减运算符
[注意]
自增自减运算符有且只能操作变量,不得操作常量!!!
++:
操作的变量自增1
自增运算符在变量之前,首先执行自增操作,再来将变量结果交给当前代码行
自增运算符在变量之后,首先执行当前代码行,再讲变量数据进行自增操作
--:
操作的变量自减1
自减运算符在变量之前,首先执行自减操作,再来将变量结果交给当前代码行
自减运算符在变量之后,首先执行当前代码行,再讲变量数据进行自减操作
2.4 自增自减运算符常见面试题
int num = 5 ;
int ret = num++ * ++ num;
num == ? ;
ret == ? ;
int num = 5 ;
++ ( num++ ) ;
num = ? ;
2.5. 关系运算符
数学中的关系运算符:
> < ≥ ≤ ≠ =
开发中使用的关系运算符:
> < >= <= != ==
所有的关系运算符对外的数据结果都是 boolean类型 true or false
class Demo6 {
public static void main ( String [ ] args) {
boolean ret = false ;
ret = 5 > 2 ;
System . out. println ( "ret = " + ret) ;
ret = 5 < 2 ;
System . out. println ( "ret = " + ret) ;
ret = 5 >= 5 ;
System . out. println ( "ret = " + ret) ;
ret = 5 <= 3 ;
System . out. println ( "ret = " + ret) ;
ret = 5 != 5 ;
System . out. println ( "ret = " + ret) ;
ret = 5 == 1 ;
System . out. println ( "ret = " + ret) ;
}
}
2.6 逻辑运算符
逻辑运算符对外结果也是boolean true or false
与
&&
同真为真,有假【即】假
或
||
有真【即】真,同假为假
非
!
强牛 犟 取反
class Demo7 {
public static void main ( String [ ] args) {
boolean ret = false ;
ret = 5 > 2 && 10 > 3 ;
System . out. println ( "ret = " + ret) ;
ret = 5 < 2 & & 10 > 3 ;
System . out. println ( "ret = " + ret) ;
ret = 5 < 2 || 10 > 3 ;
System . out. println ( "ret = " + ret) ;
ret = 5 < 2 || 10 < 3 ;
System . out. println ( "ret = " + ret) ;
ret = ! ( 5 == 5 ) ;
System . out. println ( "ret = " + ret) ;
}
}
2.7 duan路原则
int num = 10 ;
boolean ret = 10 < 5 && num++ > 5 ;
num = 10 ;
ret = false ;
int num = 10 ;
boolean ret = 10 > 5 || ++ num > 200 ;
num = 10 ;
ret = true ;
2.8 练习题
int num;
1 <= num <= 100 ; 错误!!!开发中不支持
num >= 1 && num <= 100 ; 正确写法;
char ch;
ch >= 'A' && ch <= 'Z' ;
char ch;
( ch >= 'A' && ch <= 'Z' ) || ( ch >= 'a' && ch <= 'z' ) ;
char ch;
ch >= '0' && ch <= '9' ;
int year;
( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0 ;
3. 分支结构
3.1 常见结构
顺序结构
从上至下,从左至右
分支结构
条件过滤,判定
循环结构
可以重复完成指定的代码。
算法 排序,堆栈,队列,数据结构。
3.2 if分支
if ( ) {
}
class Demo9 {
public static void main ( String [ ] args) {
boolean singleDog = false ;
if ( singleDog) {
System . out. println ( "路见不平一声吼,你还没有女朋友" ) ;
}
System . out. println ( "代码执行完成..." ) ;
}
}
3.3 if else 分支
if ( ) {
} else {
}
class Demo10 {
public static void main ( String [ ] args) {
boolean singleDog = false ;
if ( singleDog) {
System . out. println ( "两只黄鹂鸣翠柳,你依然没有女朋友" ) ;
} else {
System . out. println ( "注意身体" ) ;
}
}
}
3.4 if else if 分支
if ( ) {
} else if ( ) {
} else if ( ) {
} else {
}
class Demo11 {
public static void main ( String [ ] args) {
int score = 59 ;
if ( score >= 90 ) {
System . out. println ( "秀儿" ) ;
} else if ( score >= 80 ) {
System . out. println ( "良儿" ) ;
} else if ( score >= 70 ) {
System . out. println ( "中儿" ) ;
} else if ( score >= 60 ) {
System . out. println ( "过儿" ) ;
} else {
System . out. println ( "渣儿" ) ;
}
}
}
【补充知识点 Scanner操作使用 CV大法】
当前代码无法让普通用户使用,没有提供给用户一个输入数据的方式和方法。
1. 点技能
导包,让当前代码可以操作使用一些其他的内容。
在class之上
import java.util.Scanner;
2. 创建Scanner变量,方便使用
固定格式:
Scanner sc = new Scanner(System.in);
3. 选择合理的方法,获取你想要从键盘上得到的数据
获取int类型数据
int类型变量 = sc.nextInt();
获取float类型
float类型变量 = sc.nextFloat();
获取double类型
double类型变量 = sc.nextDouble();
获取char类型
char类型变量 = sc.nextLine().charAt(0);
【补充知识点 用户体验考虑】
虽然是一个简单的代码,但是在用户输入数据的过程中,我们需要考虑给予用户最基本的友好性提示。
【补充知识点 用户输入数据合法性判断】
作为开发者,永远不要相信你的用户。
需要对于用户输入的数据,进行当前程序合理性判定。
例如学生成绩范围是在 0 <= score <= 100。用户提供的数据如果在该范围之外,就是一个非法数据。
import java. util. Scanner ;
class Demo11 {
public static void main ( String [ ] args) {
int score = 0 ;
Scanner sc = new Scanner ( System . in) ;
System . out. println ( "亲,请输入学生的成绩哦~~~" ) ;
score = sc. nextInt ( ) ;
if ( score > 100 || score < 0 ) {
System . out. println ( "亲,输入的数据有错哦~~~" ) ;
System . exit ( 0 ) ;
}
if ( score >= 90 ) {
System . out. println ( "秀儿" ) ;
} else if ( score >= 80 ) {
System . out. println ( "良儿" ) ;
} else if ( score >= 70 ) {
System . out. println ( "中儿" ) ;
} else if ( score >= 60 ) {
System . out. println ( "过儿" ) ;
} else {
System . out. println ( "渣儿" ) ;
}
}
}