【java初学】变量定义,运算符和分支结构

变量定义,运算符和分支结构

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);
/*
Demo2.java:4: 错误: 可能尚未初始化变量a
                System.out.println(a);
                                   ^
1 个错误
*/
1.2.5 Java中规定,变量未定义不得使用【常见拼写错误】
// int num1 = 10;
System.out.println(nmu1);
/*
Demo2.java:7: 错误: 找不到符号
                System.out.println(nmu1);
                                   ^
  符号:   变量 nmu1
  位置: 类 Demo2
1 个错误
*/
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 = 30 num2 = 20
		num1 = num1 * num2; // num1 = 600 num2 = 20
		num1 = num1 - num2; // num1 = 580 num2 = 20
		num1 = num1 / num2; // num1 = 29 num2 = 20
		num1 = num1 % num2; // num1 = 9 num2 = 20
		
		num1 *= num2; // num1 = 180 num2 = 20
		
		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 == ?;

/*
num = 7
ret = 35

如果你面试遇到这样的问题,请选择场外求助
	num++ * ++num;	
	num++ ==> 取 5 变 6 num值当前为6
	++num ==> 变 7 取 7 
	5 * 7 ==> 35;
*/
int num = 5;
++(num++);

num = ?;
/*
num 
	编译错误
	1. 小括号里面的内容对外可以认为是一个整体,也就是一个常量!!!
	2. 自增自减运算符不得操作常量
*/
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;
/*
逻辑与duan路原则:
	逻辑与操作情况下,如果表达式中出现了任何一个条件为false,从false条件之后,所有的内容不再运行。
	逻辑与表达式中只要有一个false,整个表达式结果已经明确。不需要进行运算。
*/

int num = 10;
boolean ret = 10 > 5 || ++num > 200;

num = 10;
ret = true;
/*
逻辑或duan路原则:
	逻辑或操作情况下,如果发现存在一个true条件,之后所有条件,都是无所谓的。
*/
2.8 练习题
/*
只写条件
*/
// 1. 写出判断一个int类型数据在1 ~ 100之间的条件
int num;
1 <= num <= 100; 错误!!!开发中不支持
num >= 1 && num <= 100; 正确写法;
    
// 2. 写出判断一个char类型字符在大写字母范围以内
// 任何时候,只要使用字符,有且只能使用字符本身。
char ch;
ch >= 'A' && ch <= 'Z';

// 3. 写出判断一个char类型字符在英文字母范围以内
char ch;
// 括号中的条件是一个整体
(ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');

// 4. 写出判断一个char类型字符是否是数字字符
char ch;
ch >= '0' && ch <= '9';

// 5. 闰年条件
/*
能被4整除,但是不能被100整除,或者可以被400整除
*/
int year;
(year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
3. 分支结构
3.1 常见结构
顺序结构
	从上至下,从左至右

分支结构
	条件过滤,判定

循环结构
	可以重复完成指定的代码。
	算法 排序,堆栈,队列,数据结构。
3.2 if分支
if (/* 条件 boolean true or false */) {
    // 语句体
}

/*
执行流程:
	代码执行到if分支结构,首先判断if之后的小括号内容是否为true,如果为true,执行语句体。如果为false,直接执行大括号之外的内容。
	语句体执行完毕,依然会执行大括号之外的内容。
*/
class Demo9 {
	public static void main(String[] args) {
		boolean singleDog = false;
		
		if (singleDog) {
			System.out.println("路见不平一声吼,你还没有女朋友");
		}
		
		System.out.println("代码执行完成...");
	}
}
3.3 if else 分支
if (/* 条件 boolean true or false */) {
	// true 语句体
} else {
    // false 语句体
}

/*
执行流程:
	代码执行到if else结构,首先判断if之后的条件,如果是true,执行true语句体,如果是false,执行false语句体。
	世界上最遥远的距离,是我在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 (/* 匹配条件1 */) {
    // 处理方式1
} else if (/* 匹配条件2 */) {
    // 处理方式2
} else if (/* 匹配条件3 */) {
    // 处理方式3
} else {
    // 最终处理方式
}
/*
执行流程:
	当前程序运行到if else if结构,会使用条件匹配对应的if内容,如果匹配到对应的条件,执行对应的处理方式,如果没有任何一个条件匹配,执行else中的最终处理方式。
	不管执行的是哪一个处理方式,都会结束当前if else if分支结构

学生成绩:
	满分100分
	>= 90 秀儿
	>= 80 良儿
	>= 70 中儿
	>= 60 格儿
	< 60 渣儿
*/
/*
学生成绩:
	满分100分
	>= 90 秀儿
	>= 80 良儿
	>= 70 中儿
	>= 60 过儿
	< 60 渣儿
*/
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。用户提供的数据如果在该范围之外,就是一个非法数据。
/*
学生成绩:
	满分100分
	>= 90 秀儿
	>= 80 良儿
	>= 70 中儿
	>= 60 过儿
	< 60 渣儿
*/
// 导包
import java.util.Scanner;

class Demo11 {
	public static void main(String[] args) {
		int score = 0;
		// 定义一个Scanner的变量,固定格式
		Scanner sc = new Scanner(System.in);
		
		// 提示用户输入
		System.out.println("亲,请输入学生的成绩哦~~~");
		// 从键盘上获取int类型数据
		score = sc.nextInt();
		
		// 用户输入数据合法性判断
		if (score > 100 || score < 0) {
			System.out.println("亲,输入的数据有错哦~~~");
			// System.exit(0);退出程序
			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("渣儿");
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值