目录
一、运算符
1.1 概述
对常量或变量进行操作的符号,通常用于数据的比较或运算。
举例:
(1) 10 + 20中,+是运算符中的算术运算符
(2)销售产品,验证库存量 >= 购买数量,>= 是比较运算符
运算符分类:
算数运算符、赋值运算符、比较运算符、逻辑运算符、位移运算符、三元运算符
1.2 算数运算符
由常量,变量,运算符组成符合java语法的式子就称为表达式,表达式都有结果,结果就是表达式的值
double price = 22.9;
int count = 2;
double total = price * count;
*:运算符, 并且是算术运算符, 表示乘法运算
price * count:是表达式, 由于 * 是算术运算符, 因此这个表达式叫算术表达式
算数运算符:
案例:
public class Day0303 {
public static void main(String[] args) {
int a = 9;
int b = 2;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b); //4 默认整数 舍弃小数位
double d = (double)a/(double)b;
System.out.println(d);
System.out.println(a%b);
//自增++ 自减--
//++a a = a + 1;
//System.out.println(++a);
//System.out.println(a++);
int sum = a++ + b;
System.out.println(sum); //11 a = 9
//++放在前面 先加后运算 ++ 放后面 先运算后加
int sum2 = a + 10;
System.out.println(sum2); // 20
int dx = 5;
dx++;
//System.out.println(dx);//6
dx = dx++*2;
System.out.println(dx);//12 结果是12原因是dx=6时已经计算完成并且重新赋值给dx
//等赋值完成之后原dx = 7 但是已经计算完成,结果不可变。
++dx;
//System.out.println(dx); //13
// -- 自减 a-- | a = a - 1
int dc = 5;
--dc; //4
dc = dc-- + 5; //dc-- 先运算 结果已经固定
dc--;
System.out.println(dc); //8
int db = 5;
db = ++db - db--; //++db db = 6;
//System.out.println(db); //0
db = db--; //0
System.out.println(db); //0
// a++; 和 a = a++;
// a = a++ 运算符 数据
int o = 9;
o = o++ - o--;
// 9 10
System.out.println(o);
int fx = 9;
fx++;//10
fx = fx-- + ++fx;
// 10 10
System.out.println(fx); //20
}
}
自增自减总结:
++?++ 在前比较简单,先运算再赋值 x = ++ b 值就是 11?++++ 在后比较简单,先赋值再运算 x = b ++ 值就是 x = 10 只要这一行或再次使用 b 执行完 b才会变成11
1.3 赋值运算符
/**
* 赋值运算符
* = += -= *= /= %=
*/
public class S0302{
public static void main(String[] args) {
int a = 10;
a += 2; // a += ? 等同于 a = a + ? 等同于 a = a + 2
a -= 5; // a = a -5;
a *= 2; // a = a * 2;
a /= 2; // a = a / 2;
a %= 3; // a = a % 3;
System.out.println(a);
//练习
int b = 10;
b += 5; // b = 10 + 5 //15
b *= 3; // 15 * 3 = 45
b--;
//如果++或者-- 在后,如果给赋值那么值就是++--之前的值,如果直接++--
//那么下一行打印就相当于已经操作完成的值。
System.out.println(b);
}
}
案例 - 面试题
short s = 5; s = s + 1; 代码是否有错?
short s = 5; s += 1; 代码是否有错?
第一个有错误,原因:类型转化 小类型(s short) 接收大类型(s + 1 int)
变化为:
short s = 5; s = (short)(s + 1);
+= 操作虽然等式拆解出来和上面是一样的, 但是JVM会默认认为+=
类型允许在虚拟机中运行并且能够在运算时自动转换类型,相当于额外的功能。 可以避免类型转化问题
1.4 比较运算符
用于比较是否相等和计算大小关系的符号,计算结果为boolean。
以下为常见的比较运算符:
以下为代码中的使用案例:
class S0303 {
public static void main(String[] args) {
int i = 5;
int k = 10;
int m = 20;
//== equals() 这两个都是判断值是否相等(面试题)
// == 是比较当前两个值的内存地址是否相同
//equals() 比较的是值是否相等。
String s1 = "哈哈";
String s2 = "哈哈";
System.out.println(s1 == s2); //true s1和s2都指向一个内存地址
System.out.println(s1.equals(s2)); //true
System.out.println("----------------");
System.out.println(i == k); //false
System.out.println(i+k != m); //true
System.out.println(i+k > m); //false
System.out.println(i+k < m); //true
System.out.println(i+k >= m); //false
System.out.println(i+k <= m); //true
}
}
1.5 逻辑运算符
用于连接逻辑数据的运算符,只能运算boolean类型的数据,运算结果为boolean.
举例 1: 模拟登录页面 , 需要输入用户名和密码 , 验证 : 输入的用户名正确 同时 输入的密码正确 , 登zhangsan 123456 // 正确if ( username . equals ( "zhangsan" ) && password . equals ( "123456" )){// 成功登陆} else {// 错误,重新登陆}举例 2 : 客户到我行进行金融交易 , 需要客户登记个人信息 , 登记页面上有输入电话号码选项, 电话号码有很多种 : 个人手机 , 家庭座机 , 紧急联系人 ... 后台验证 , 判断 个人手机 或者 家庭座机
几种常见逻辑运算符:
代码中的使用案例:
public class Day0306 {
public static void main(String[] args) {
int a = 50;
int b = 3;
int c = 10;
//逻辑与 & and 只有表示式都为true 结果才是true
System.out.println(true & true); //true
System.out.println(true & false); //false
System.out.println(false & true); //false
System.out.println(false & false); //false
System.out.println(a > b & a > c); //true
System.out.println(a > b & a < c); //false
System.out.println(a < b & a > c); //false
System.out.println(a < b & a < c); //false
//逻辑或 | or 表示式只要有一个成立,结果就是true
System.out.println(true | true); //true
System.out.println(true | false); //true
System.out.println(false | true); //true
System.out.println(false | false); //false
//异或 ^ (shfit + 6) 如果表达式结果不同 返回true 相同返回false
System.out.println(true ^ true); // false
System.out.println(true ^ false); // true
System.out.println(false ^ true); // true
System.out.println(false ^ false); // false
//非 ! 结果取反 真的变成假的,假的变成真的。 只能作用在布尔值上
System.out.println(!true); // false
System.out.println(!false); // true
System.out.println(!(a > b)); // false
System.out.println(!(a < b & a > c)); //true
}
}
短路操作案例:
public class Day0307 {
public static void main(String[] args) {
//短路与和短路或结果和逻辑与逻辑或相同。
//不同点在于短路这种写法更节约内存开销。
//性别 男、女、未知 2个字符 // 0 1 2 一个字节就够了。
int a = 50;
int b = 3;
int c = 10;
//短路与 && and 只有表示式都为true 结果才是true
System.out.println(a > b && a > c); //true -- 没影响
System.out.println(a > b && a < c); //false -- 没影响
System.out.println(a < b && a > c); //false -- 短路与第二就不执行了。
System.out.println(a < b && a < c); //false -- 短路与第二就不执行了。
//短路或 || or 表示式只要有一个成立,结果就是true
System.out.println(true || true); //true -- 第二个不执行
System.out.println(true || false); //true -- 第二个不执行
System.out.println(false || true); //true -- 没影响
System.out.println(false || false); //false -- 没影响
}
}
口诀(建议背诵):
# & 和 && 、 | 和 || 的异同 -- 简答&& 和 & 相同点:& 是逻辑与, && 短路与。两个执行最终结果相同,表达式左右只要有一个为 false 结果为 false 。&& 和 & 不同点:如果表达左边已经为 false && 右边就不执行了。| 和 || 相同点:| 是逻辑或, && 短路或。两个执行最终结果相同,表达式左右只要有一个为 true 结果为 true 。| 和 || 不同点:如果表达左边已经为 true || 右边就不执行了。
1.6 三元运算符
别名三目运算符,同时可以操作三个数据或者表达式的运算符
格式:表达式(结果为布尔值) ? 值1 : 值2;
代码实例:
public class Day0308 {
public static void main(String[] args) {
// 60
int score = 15;
if(score >= 60){
//System.out.println("奖励一辆兰博基尼玩具");
}
if(score < 60){
//System.out.println("男女混合双打");
}
//三元运算 三目运算
//格式: 表达式(布尔)?值1:值2; 左真右假(真取左 假取右)
String str = score >= 60?"奖励一辆兰博基尼玩具":"男女混合双打";
System.out.println(str);
//限制:只有两种结果时候可以使用。
//0或1 - 转化 -- t 和 f
//score == 0 ? "t":"f";
int a = 99,b=0,c=50,d=200,e=70;
//要求通过程序(三元)取出最大值。
int max;
max = a > b ?a:b;
max = max > c ?max:c;
max = max > d ?max:d;
max = max > e ?max:e;
System.out.println(max);
}
}
二、Scanner类
键盘录入: Scanner类,来自于java.util包,是JDK提供的类型
作用: 在程序运行的过程中,可以使用Scanner类来实现获取从键盘输入的数据,提高数据来源灵活度.
Scanner 类使用步骤 :第一步 : 导包目的 : 为了让 JVM 定位到 Scanner 类型所在的具体位置导入方式 : 类的声明之上使用关键字 import , 表示导入import java . util . Scanner;第二步 : 创建键盘录入对象 , Scanner sc = new Scanner ( System . in ) ;第三步 : 调用 sc 对象的 nextInt 方法 , 获取键盘录入的一个整数int x = sc . nextInt () ;第四步 : 使用 x 后续处理
2.1 基础案例
// import 导包 Java中导入一个其他包中的一个类,
// 那么本类就可以调用其他类的属性或方法
//import java.util.*; 第一步:导包
import java.util.Scanner;
public class Day0309 {
public static void main(String[] args) {
//实例化(new)Scanner类
//实例化(new)Scanner类
//接收的类型 标识符 = new 类();
Scanner sc = new Scanner(System.in);
//sc 对象名称
//String str = sc.next(); //next需要输入一次
//System.out.println(str);
//按照行捕获信息
//String str1 = sc.nextLine();
//各种数据类型
//byte s1 = sc.nextByte();
//short s2 = sc.nextShort();
//int s3 = sc.nextInt();
//long s4 = sc.nextLong();
//float s5 = sc.nextFloat();
//double s6 = sc.nextDouble();
//char s7 = sc.nextChar(); 没有方法
boolean s8 = sc.nextBoolean();
//System.out.println(s1);
//System.out.println(s2);
//System.out.println(s3);
//System.out.println(s4);
//System.out.println(s5);
//System.out.println(s6);
//System.out.println(s7);
System.out.println(s8);
}
}
2.2 案例1: 键盘录入两整数求和
/**
* 两个整数求和
*/
import java.util.Scanner;
public class S0309{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数");
int a = sc.nextInt();
System.out.println("请输入第二个整数");
int b = sc.nextInt();
System.out.println("两个整数和:"+(a+b));
}
}
2.3 案例2: 键盘录入三整数求最大值(三元运算)
import java.util.Scanner;
public class S0309{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数");
int a = sc.nextInt();
System.out.println("请输入第二个整数");
int b = sc.nextInt();
System.out.println("请输入第三个整数");
int c = sc.nextInt();
//求最大值
int max = a > b ? a : b;
max = max > c ? max : c;
System.out.println("最大值:"+max);
}
}
2.4 案例3: 键盘录入一整数,判断奇偶(三元运算)
import java.util.Scanner;
public class S0309{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入整数");
int a = sc.nextInt();
String msg = a%2 == 0 ?"偶数":"奇数";
System.out.println(msg);
}
}
三、随机数Random类
Random 类使用步骤 :1 ) 导包 : 将 Random 类所在具体路径导入到类的声明之上import java . util . Random;2 ) 创建出 Random 类型对象 :Random ran = new Random () ;3 ) 使用 ran 对象名 . 调用 Random 类型中功能int a = ran.nextInt ( int count ) : 参数 count 表示需要随机生成的数据的范围 , 此方法生成数据范围 [ 0 , count)。注意 : 生成的随机数 , 可以使用一个变量将其结果保存下来4 ) 后续随机数使用
3.1 案例 : 1-100之间的任意一个随机整数
import java.util.Random;
public class S0310{
public static void main(String[] args) {
//1.导包
//2.创建这个类的对象
Random r = new Random();
//3.调用方法 nextInt()
int m = r.nextInt();
//可以给nextInt方法传范围1-100的随机数
//[0,count), 左闭有开, 包含0,但是不包含count, 实际数据范围 : 0~99之间
int n = r.nextInt(100)+1;
System.out.println(n);
}
}
四、综合案例
使用 Sccnner 姓名 性别 年龄 ( int ) 工资 ( double ) 工号 ( random )统一打印出来 ...
import java.util.Scanner;
import java.util.Random;
public class Demo{
public static void main(String[] args){
Random ran = new Randm();
Scanner sc = new Scanner(System.in);
String name = sc.next();
int age = sc.nextInt();
double salary = sc.nextDouble();
int id = ran.nextInt(900000) + 100000;
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("薪资:" + salary);
System.out.println("编号:" + id);
}
}