基础 与 数值计算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;

变量的命名

重名

不能重名

大小写

大小写敏感

valuevaluE 不是一个变量

规范

驼峰式命名

样例正确解说
playerName全小写,第二个单词起,首字母大写
PlayerName每个单词首字母大写,一般是给自定义类型用的
playername写它就很缺德
player_namePython 式命名,但这里是 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

是什么

程序里出现的值

字面量数据类型
字面量数据类型
1int
1.0double
"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

1
Console.readLine();
案例
1 2
String name = Console.readLine();Console.println(name);

打印不换行

1
Console.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。

具体原因,在之后的课程中会解释

随机数生成

1
Math.random();

会得到一个 0 - 1 之间,包含 0,但不包含 1 的 随机小数

也就是 得到一个 x,0<=x<10 <= x < 1

用法

如果想得到一个 0 - 9 之间的整数可以写

1
int value = (int)(Math.random() * 10);

ZZAX 微信公众

文档一更新,立刻告诉你