文章目录
项目二:打好Java编程基础
任务一:一元二次方程(顺序结构版)
1.思路分析
- 源码:
2.编程实现
创建net.zengjinyi.p02.t01
包
在包里创建Equation
类
- 在主方法里编写代码
运行程序,查看结果
- 通过大语言模型来求根
改进程序,输入系数
运行程序,查看结果
-
两个不相等实根
-
两个相等实根
-
没有实数根
代码说明
本代码实现了一元二次方程的求解功能。代码遵循IPO模式,即输入、处理和输出。用户通过键盘输入方程的系数a、b、c,程序计算判别式delta,进而求得方程的两个根×1和x2,并输出结果。代码逻辑清晰,包含输入、处理和输出三个主要部分,方便用户快速求解一元二次方程。
程序小结
为了判断根的存在情况,以后我们会使用选择结构(if-else if-else)来处理
3.知识讲解
1、代码基本格式
语法格式
Java一切代码都要放在类里
代码规范(norm)
-
好坏问题
-
主要目的是保证代码质量(Code Quality)
-
good or bad
代码规则(rule)
- 对错问题
- right or wrong
语句分类
结构定义语句
-
定义类
class 类名{
…
} -
定义接口
interface 接口名{
…
}
-
定义方法
返回值类型 方法名(参数类表){
…
}
功能执行语句
- 计算和处理
大小敏感
比如,age与AGE是两个不同的变量,可以保存不同的值
shell
贝壳,外壳
交互式环境(interactive environment)
C、C++、Java、Python、JavaScript都是大小写敏感的语言
-
Python
如果执行ipython报错,那么执行命令:pip install ipython,安装ipython
如果提示找不到匹配命令,那么配置环境变量
-
JavaScript
下载Node.js的网址-https://nodejs.org/en/download
将安装程序下载到本地
设置安装位置D:\Program Files\nodejs
完成安装
查看Node版本
执行命令:node -v
进入Node交互式环境,运行JavaScript代码
VB和VFP是大小写不敏感的编程语言
-
VB
-
VFP
缩进格式
- 采用缩进格式输入代码,看起来层次分明
- 不采用缩进格式,程序依然可以运行出正确结果,但是代码显得凌乱,可读性很差
- 用进废退:Use it or lose it.
2、三种注释方式
单行注释
- //注释内容
多行注释
- /*
注释内容
注释内容
注释内容
*/
文档注释
- /**
注释内容
注释内容
注释内容
*/ - 导出项目的API文档,具体用法参看笔记2.1.2
思考题:为什么程序要有注释呢?
- 更好的理解(understanding)
- 更好的协作(cooperation)
演示
3、关键字与标识符
关键字(keyword)
-
概念
键字(Keyword)是编程语言里事先定义好并赋予了特殊含义的单词,也称作保留字(Reserved Word)。 -
JDK8有50个关键字,注意:都是小写
-
JDK11增加了一些关键字,比如var用来声明变量
-
var x = 100,自动推断变量x是整型,于是x + 150结果是250
var y = “100”,自动推断变量y是字符串,于是y+150结果是“100150”
标识符(identifier)
- 构成规则(rules)-明是非
(1)构成(composition)
字母、数字、_、$[letter,number,underscore,dollar]
其实可以用汉字作为标识符,但是不建议用
(2)打头(start with)
不能以数字打头
(3)避免(avoid)
避免用关键字作标识符
给关键字添加一点东西就可以作为标识符
(4)演示
合法标识符(legal identifier)
非法标识符(illegal identifier)
- 命名规范(norms)-知好歹
(1)包名所有字母一律小写
net.zengjinyi.p01.t02
(2)类名和接口名每个单词首字母都要大写
HelloWorld
ArrayList(数组列表)
HashMap(哈希映射)
(3)常量名所有字母都大写,单词之间用下划线连接
MAX_VALUE
MIX_VALUE
EXIT_ON_CLOSE
(4)变量名和方法名第一个单词全部小写,从第二个单词开始每个单词首字母大写
nextLine-变量名
getNextLine-方法名
(5)建议使用有意义的英文单词定义标识符,增加程序可读性
username-用户名
password-密码
age-年龄
price-价格
(6)演示(demenstration)
4、变量与常量
声明变量(declare variables)
- 语法格式
(1)声明:类型 变量名;
1.类变量(全局变量)可以不初始化
2.方法里的局部变量必须初始化(initialization)
(2)定义:类型 变量名 = < 值>; - 基本数据类型
(1)数值型
1.byte
字节型
1个字节
[ − 2 8 , 2 8 − 1 ] [-2^8,2^8-1] [−28,28−1]
[-128,127]
2.short
短整型
2个字节
[ − 2 16 , 2 16 − 1 ] [-2^{16},2^{16}-1] [−216,216−1]
[-32,768,32,767]
3.int
整型(integer)
4个字节
[ − 2 32 , 2 32 − 1 ] [-2^{32},2^{32}-1] [−232,232−1]
-2,147,483,648,2,147,483,647
4.long
长整型
8个字节
[ − 2 64 , 2 64 − 1 ] [-2^{64},2^{64}-1] [−264,264−1]
[-9,223,372,036,854,775,808,9,223,372,036,854,775,807]
5.float
浮点型
4个字节
[1.4E-45,3.4028235E+38]
6.double
双精度
8个字节
[4.9E-324,1.7976931348623157E+308]
(2)字符型
char
字符型
2个字节
[‘\u0000’,‘\uffff’]~[0,65,535]
(3)布尔型
boolean
true
false - 案例演示
注意事项
长整型数,后面要加L(最好大写,小写容易跟数字1混淆)
实数,默认是双精度,如果要赋给浮点型变量,后面要加f或F,否则会报错
定义常量(declare constants)
- 语法格式
final 类型 常量名 =<值> - 简要说明
常量名最好全部大写
常量不能再给它赋值 - 案例演示
5、算术运算与算术表达式
算术运算符(arithmetic operators)
-
+ + +
(1)正号(plus sign)
(2)+3
(3)plus three
-
− - −
(1)负号(minus sign)
(2)-3
(3)minus three
(4)我欠人家3元
1.I owe someone three yuan.
2.I’m in debt to someone for three yuan.
3.我 - 债务人(debtor)
4.人家 - 债主(lander,locaner) -
+ + +
(1)加(add - addlition)
sum(和)
(2)3 + 2 = 5
(3)Math English:Three plus two equals five.
(4)Daily English:Add two to three,and you will get five.
-
− - −
(1)减(subtract - subtraction)
difference(差)
(2)Example:5 - 3 =2
(3)Math English:Five minus three equals two.
(4)Daily English:Subtract three from five,and you will get two.
-
∗ * ∗
(1)乘(multiple - multiplication)
product(积)
cross product 叉乘
dot product - 点乘
2 × 3 = 6 2\times3=6 2×3=6 - cross product
2 ⋅ 3 = 6 2\cdot3=6 2⋅3=6 - dot product
(2)Example:3 * 7 = 21
(3)Math English:Three times seven equals twenly-one.
(4)Daily English:Multiply three by seven,and you will get twenty-one.
-
/ / /
(1)除(divide - division)
quotient(商)
IQ
Intelligence Quotient
智商
21 ÷ 3 = 7 21 \div 3=7 21÷3=7
EQ
Emotional Quotient
情商
(2)Example:21/3=7
(3)Math English:Twenty-one divided by three euals seven.
(4)Daily English:Divide twenty-one by three,and you will get seven.
-
%
(1)求余(remainder)|求模(modulo)
(2)32 % 5 = 2
(3)Thirty-two modulo five equals two
(4)作用
可以用作分类
比如对2求余,可以将整数分为奇数和偶数
(5)引申
利用/
和%
运算符可以编写一个带余除法程序
package net.zengjinyi.p02.t01;import java.util.Scanner; /** * 功能:带余除法 * 作者: * 日期:2024年04月10 */ public class DivisionWithRemainder { public static void main(String[] args) { //声明部分 int a, b, q, r; Scanner sc = new Scanner(System.in); //输入部分 System.out.print("a = "); a = sc.nextInt(); System.out.print("b = "); b = sc.nextInt(); //处理部分 q = a / b; r = a % b; //输出部分 System.out.println(a + "÷" + b + "=" + q + "……" + r); } }
-
+ + ++ ++
(1)自增(auto-increment)
1.前自增
++n
先加后用
2.后自增
n++
先用后加
计算1+2+3+……+100
用Python完成同样任务
-
−
−
--
−−
(1)自减(auto-decrement)
1.前自减
--n
先减后用
2.后自减
n–
先用后减
计算100+99+……+1
用Python完成同样任务
注:
+
+
++
++,
−
−
--
−−只能作用在变量上,不能作用在常量或表达式上
运算优先级(operation precedence)
- 正负
- 乘除求余
- 加减
- 注:用括号改变优先次序
算术表达式(arithmetic expression)
- 概念(concept)
利用算术运算符将常量和变量连接起来的表达式
x 2 + y 3 − 3 z 2 3 x 2 − 4 y 3 + 4 z 3 \displaystyle\frac{x^2 +y^3-3z^2}{3x^2-4y^3+4z^3} 3x2−4y3+4z3x2+y3−3z2 - 实例(example)
方法一
(xx +yyy-3zz)/(3xx-4yyy+4zzz)
方法二
(xx+Math.pow(y,3) -3zzz/(3xx-4Math.pow(y,3)+4*math.pow(z,3)
6、赋值运算符
简单赋值运算(simple assignment operator)
-
语法格式
变量 = 表达式 -
简单说明
赋值运算具有双重功能,先计算赋值号右边表达式的值,然后将赋值给左边的变量
因为Java是一种静态语言,所以要求表达式类型要与变量类型匹配,否则就会报错 -
案例演示
兼容
compatible-adj.兼容的
This application is not compatible with windows11.
compatibility-n.兼容性
Our computers have very good compatibility
对比动态语言Python,比较两者异同
-
英语学习
1.int a = 666;
2.Assign 666 to the int variable a.
3.将666赋给整型变量a。
复合赋值运算(compound assignment operators)
- 基本概念
将加减乘除求余运算和赋值运算合在一起使用 - 语法格式
1.+=
a += b
精简一点,但是可读性不好
a = a + b
相比较而言,可读性更好
2.-=
a -= b
a = a - b
3.*=
a *= b
a = a * b
4./=
a /= b
a = a / b
5.%=
a %= b
a = a % b
more concise but less readable - 案例演示
计算1+2+3+……+100(arithmetic sequence)
7、键盘输入数据
利用扫描器
-
创建扫描器对象
Scanner sc = new Scanner(System.in);
System.in
标准字节输入流
表示的物理设备-键盘 -
输入各种类型对象
1.整数
sc.nextInt()
2.浮点型实数
sc.nextFloat()
3.双精度实数
sc.nextDouble()
4.字符串
sc.next()
不接收空格之后的内容 -
案例演示
在net.zengjinyi.p02.t01
包里创建ScannerDemo
类
package net.zengjinyi.p02.t01; import java.util.Scanner; /** * 功能:扫描器演示 * 作者: * 日期:2024年04月10 */ public class ScannerDemo { public static void main(String[] args) { //声明部分 int age; float price; double score; String name; String message; Scanner sc = new Scanner(System.in); //输入部分 System.out.print("age = "); age = sc.nextInt(); System.out.print("price = "); price = sc.nextFloat(); System.out.print("score = "); score = sc.nextDouble(); System.out.print("name = "); name = sc.next(); System.out.print("message = "); message = sc.next(); //输出部分 System.out.println("age = " + age); System.out.println("price = " + price); System.out.println("score = " + score); System.out.println("name = " + name); System.out.println("message = " + message); } }
运行程序,查看结果
利用缓冲流
-
思路
1.将标准字节输入流转换成字符输入流
2.再将字符输入流转换成缓冲字符输入流
3.利用缓冲字符输入流的readLine()方法接受任意字符串(可以包含空格) -
案例演示
在net.zengjinyi.p02.t01
包里创建bufferedReaderDemo
类package net.zengjinyi.p02.t01; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * 功能:缓冲字符输入流演示 * 作者: * 日期:2024年04月10 */ public class BufferedReaderDemo { public static void main(String[] args) { String message =""; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("message = "); try{ message = br.readLine(); }catch (IOException e){ System.err.println(e.getMessage()); } System.out.println("message = " + message); } }
运行程序,查看结果
4.拓展练习
- 幸运抽奖-由卡号计算幸运数
(1)卡号是4位整数
(2)各位数字相加得到幸运数
(3)输入四位整数的卡号
(4)编程计算幸运数
(5)关键点:整数拆分 - 计算三角形面积(海伦公式)
- 输出26个英文字母(小写、大写)
5.总结提高
英文学习
- power(权力)
(1)力量
(2)权力
(3)电源
(4)幂 - telation(关系)
(1)competition(竞争)
(2)cooperation(合作)
(3)Keep a balance between competition and cooperation 保持竞争与合作的平衡 - program(程序)
(1)计算机科学家沃斯提出一个著名的公式
(2)program = data structure +algorithm
(3)程序 = 数据结构 + 算法 - static language
(1)静态语言
实例:C,C++,Java,Scala
特点:变量必须先声明后使用
所赋值类型必须与声明的变量类型匹配 - dynamic language
(1)动态语言
实例:JavaScript,Python,Ruby
特点:变量无须声明,直接赋值使用
变量类型由所赋值类型来决定 - initial
(1)初始的
初值(initial value)
初心(initial intention):不忘初心,方得始终
(2)派生词
initialize:动词:初始化
initialization:名词:初始化 - define
(1)动词:定义
在Python里定义函数的关键字是def
def add(a,b):
return a+b
演示Java里定义函数(方法)
int add(int a,int b){
return a+b;
}
Java是静态语言,必须指定参数和返回值类型
如果实参类型与虚参类型不兼容,函数调用就会报错
(2)派生词
definition:名词:定义
- 在这个任务中,我们编写了一个Java程序来解决一元二次方程,程序接受用户输入的系数a、b、c,并计算出方程的根。通过计算判别式delta的值,我们可以确定方程有两个不相等实根、两个相等实根还是没有实数根。这个程序遵循了IPO模式,即输入(Input)、处理(Process)和输出(Output),逻辑清晰,方便用户快速求解一元二次方程。
在改进程序中,我们引入了Scanner对象,以便从键盘接收用户输入的数据,并引入了中间变星delta。通过用户输入的系数,程序能够准确计算方程的根,并输出对应的结果,包括两个不相等实根、两个相等实根和没有实数根的情况。
在编写代码时,我们遵循了Java的关键字和标识符规范,命名规范为包名小写、类名和接口名首字母大写、常量名全大写、变是名和方法名采用驼峰命名法。同时,我们介绍了Java中的基本数据类型、算术运算符、赋值运算符和键盘输入数据的方法。
通过这个任务,我们不仅学习了如何编写一个简单的Java程序来解决数学问题,还加深了对Java编程规范和基础知识的理解。这些知识对于日后的编程工作和学习都非常重要。