基础 与 数值计算Basics and Numbers
输入输出I/O
药水商店
1 2 3 4 5 6 7 8 9 10 import io.zzax.jadeite.console.Console; public class Main { public static void main(String[] args) { int price = Console.readInt(); int amount = Console.readInt(); int total = price * amount Console.println(total); }}
API
Console.readInt()
可以向用户索要一个整数
Console.println(x)
可以将 x 展示给用户
输入输出
input | 输入 | 用户 给 程序 |
---|---|---|
output | 输出 | 程序 给 用户 |
程序基本功能
输入 处理 输出
Java 原生态写法
1 2 3 4 5 6 7 8 9 10 11 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int price = scanner.nextInt(); int amount = scanner.nextInt(); int total = price * amount; System.out.println(total); }}
注释Comments
被注释的代码,不会被执行,编译时会被删除
样例
1 2 3 4+5+6+7 8+9 10 11 12+13 14 15+16 17 18 import io.zzax.jadeite.console.Console; public class Main { /* * 程序入口 psvm */ public static void main(String[] args) { // 输入 int price = Console.readInt(); int amount = Console.readInt(); // 处理 int total = price * amount // 输出 Console.println(total); }}
单行注释
//
开始往右到这行结尾, 不视为代码
多行注释
/*
开始 到 下一个 */
之间, 不视为代码
代码规范Code Conventions
规范
不影响程序执行的 行业规则
小提琴的故事
缩进
四个空格
增加缩进:tab
减少缩进:shift + tab
空格
观察
换行
不同的功能区 之间 加 空格
程序要求
Level 1 不犯语法错误
不飘红
Level 2 不犯规范错误
空格 换行 缩进 大小写 命名
Level 3 满足功能要求
完成商业逻辑
Level 4 结构设计合理
内部设计
变量Variables
程序的记忆
变量的基本操作
声明
int v1;
开辟数据格 - 保险箱
赋值
v1 = Console.readInt();
往数据格里放东西
取值
int sum = v1 + v2;
之后再出现 v1
且 不在 等号 左边
计算机就会去 找 v1
查看 数据格里 的数据
变量声明的语法
格式
<变量类型> <变量名>; <变量类型> <变量名> = <值>;
例子
int a; int a = 1;
变量的命名
重名
不能重名
大小写
大小写敏感
value
和 valuE
不是一个变量
规范
驼峰式命名
样例 | 正确 | 解说 |
---|---|---|
playerName | ✅ | 全小写,第二个单词起,首字母大写 |
PlayerName | ❌ | 每个单词首字母大写,一般是给自定义类型用的 |
playername | ❌ | 写它就很缺德 |
player_name | ❌ | Python 式命名,但这里是 Java |
bianLiang | 🆗 | 还好 |
clhs | 🚨 | 全缩写,找骂 |
数据类型Data Types
常用数据类型
代码 | 名称 | 用途 |
---|---|---|
int | 整型 | 整数 |
double | 双精浮点类型 | 小数 |
String | 字符串 | 文字 |
尝试
让程序支持 对小数的操作
double v1 = Console.readDouble();
数据类型分类
类型 | 特征 |
---|---|
基础类型 | 小写开头,只有 8 种 |
对象类型 | 大写开头,有很多 |
8 个 基础类型
Primitive Data Types
byte short int long float double char boolean
字面量Literals
是什么
程序里出现的值
字面量数据类型
字面量 | 数据类型 |
---|---|
1 | int |
1.0 | double |
"1" | String |
数据类型匹配
规则
赋值时,等号右边的值 需要与 等号左边的变量类型 匹配
数据类型不匹配,编译会报错
1!2 int value = "abc";Console.println(value);
类型自动转换
基础数据类型中 除 boolean
外,数据类型可以不匹配
大类型数据格 接收 小类型数据值
数据会自动转换
1 2 <double value = 1;Console.println(value);1.0
强制类型转换
报错
基础数据类型中 除 boolean
外,数据类型可以不匹配
小类型数据格 接收 大类型数据值
编译会报错
1!2 int value = 1.0;Console.println(value);
签字声明
声明强制类型转换,让计算机闭嘴
1 2 <int value = (int)1.0;Console.println(value);1
数据丢失
精度可能会因此丢失
1 2 <int value = (int)1.7;Console.println(value);1
表达式Expressions
什么是表达式
字面量 运算符 变量 其它
案例
1 int result = v1 + v2; ^^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
表达式缩合
定义
计算机如何计算表达式
规则
小学生算数学题,一样
一步一步算
样例
1 2 3 int v1 = 3;int v2 = 4;int result = v1 + v2; = 3:int + v2; = 3:int + 4:int; = 7:int;
缩合 与 变量类型
规则
数值计算时,运算符左右两边如果不一致,小类型 会自动转为 大类型
1 3 + 4.03:int + 4.0:double 7.0:double
练习
1 2 3 int v1 = 3;int v2 = 4;int result = v1 + v2 * 3.0 - 2;
赋值运算符Assignment Operators
是什么
=
赋值运算符表达式缩合
赋值也是运算符
赋值语句也是表达式
赋值语句也有表达式结果值, 结果值是赋值
1 2 3 int a, b;a = 5;5b = a = 6;b = 66
表达式缩合方向
有等号的运算符:先缩合右边,再缩合左边
其它运算符:先缩合左边,再缩合右边
算术运算符Arithmetic Operators
有哪些
+ - * / % += -= *= /= %= ++ --
运算优先级
优先级
1 =int a = 2 + 2 * 5;12
先算 乘除
再算 加减
再 赋值
括号
()
可以提高优先级
1 =int a = (3 + 2) * 5;30
/
运算符
观察
1 2 3 int v1 = 3;int v2 = 4;double result = v1 / v2;
原因分析
为什么?
解决方案
1 2 3!double result = 1.0 * v1 / v2;double result = (double)v1 / v2;double result = (double)(v1 / v2);
%
运算符
案例
1 =2 =3 =4 =Console.println(7 % 2);1Console.println(7 % 3);1Console.println(7 % 4);3Console.println(8 % 4);0
用法
分析一个递增序列 0, 1, 2, 3, 4, 5
对 固定数 比如 2 求余,你会得到什么?
药水商店案例
对顾客增收 1元 塑料袋环保费
代码
1 2 3 4 5 6 7 8 9 10+11 12 13 14 15 public class Main { public static void main(String[] args) { // 输入 double price = Console.readDouble(); int amount = Console.readInt(); // 处理 double total = price * amount; total = total + 1; // 输出 Console.println(total); }}
算数同时赋值
规则
当出现
案例
x = x ? a;
可缩写为
x ?= a;
案例
price = price + 1;
等效于
price += 1;
同样适用于
+= -= *= /= %=
++
与 --
规则
当出现
案例
x ?= 1;
可缩写为
x??;
案例
price += 1;
等效于
price++;
同样适用于
++ --
注意
出现这个运算符时,请单独占一行,不要像下面这么写
int a = 4; int b = a++;
练习
背景
一人从一栋大楼上高空坠落,不幸遇难。
名侦探张大妈,过来调查情况,想知道死者是从哪层跳下来的。
但周围人都自觉没用手机录像,唯独有一个人有录了一段微信语音
语音中听到 死者生前大叫 啊.....
请你写一个程序,帮助张大妈算出 他是从那一层掉下来的
物理知识
自由落体公式是
1 2 h = - · gt 2
已知 尖叫时间长达 3.2 秒
假设 g
为 9.8
已知 大楼 每层 高 2米
代码模板
1 2 3 4 5 6 public class Main { public static void main(String[] args) { double second = 3.2; Console.println(10); }}
运算符Operators
有哪些
种类 | 样例 |
---|---|
算数运算符 | + - * / |
比较运算符 | > == < |
逻辑运算符 | && ! |
位运算符 | & >> |
条件运算符 | ?: |
完整的运算符
Oracle 官网
运算优先级
运算符自有优先级。可以使用小括号提高优先级。
下面网址中有个表格,越靠上的越优先
运算符优先级列表
Oracle 官网
运算符的种类
单目
a++ !a
双目
a + b a -= c
三目
a ? b : c
运算符空格规范
双目 和 三目 运算符 左右两边 加 空格
对
int sum = 4 + 7;
错
int sum=4+7;
API 补充
什么是 API
类似
Console.readInt();
就是一个 API,能完成一定的功能。
输入 String
1Console.readLine();
案例
1 2String name = Console.readLine();Console.println(name);
打印不换行
1Console.print(<要打印的>);
案例
1 2 3 4 Console.println("换行");Console.print("不");Console.print("换");Console.print("行");
字符串拼接
可以使用 + 对 字符串和 变量、字面量 进行拼接
1 2 3 <int value = 1;String name = "哈哈";Console.println("换行 " + value + " " + name);换行 1 哈哈
注意:这种方式有时会出现问题。如果出现,请使用 打印不换行的那个 API。
具体原因,在之后的课程中会解释
随机数生成
1Math.random();
会得到一个 0 - 1 之间,包含 0,但不包含 1 的 随机小数
也就是 得到一个 x,
用法
如果想得到一个 0 - 9 之间的整数可以写
1 int value = (int)(Math.random() * 10);