Java语言程序与数据结构(基础篇)-随记
阅读原文时间:2023年07月09日阅读:1

有关代码见BasicJava

U1-Java概述

1.注释风格

注释:// ; 块注释:/* ~ / ; javadoc注释:/* ~ */

javadoc注释
eg.
/**
 * @link:{@link 包名.类名#方法名(参数类型)} 用于快速链接到相关代码
 *
 * @link的使用语法{@link 包名.类名#方法名(参数类型)},其中当包名在当前类中已经导入了包名可以省略,可以只是一个类名,也可以是仅仅是一个方法名,
 * 也可以是类名.方法名,使用此文档标记的类或者方法,可用通过按住Ctrl键+单击 可以快速跳到相应的类或者方法上,解析成html其实就是使用< code> 包名.类名#方法名(参数类型)< /code>
 *
 * @code: {@code text} 将文本标记为code
 *
 * {@code text} 会被解析成 text 
 * 将文本标记为代码样式的文本,在code内部可以使用 < 、> 等不会被解释成html标签, code标签有自己的样式
 * 一般在Javadoc中只要涉及到类名或者方法名,都需要使用@code进行标记。
 *
 * @param: 一般类中支持泛型时会通过@param来解释泛型的类型
 * @author: 详细描述后面一般使用@author来标记作者,如果一个文件有多个作者来维护就标记多个@author,@author 后面可以跟作者姓名(也可以附带邮箱地址)、组织名称(也可以附带组织官网地址)
 * @see: 一般用于标记该类相关联的类,@see即可以用在类上,也可以用在方法上。
 * @since: 一般用于标记文件创建时项目当时对应的版本,一般后面跟版本号,也可以跟是一个时间,表示文件当前创建的时间
 * @version: 用于标记当前版本,默认为1.0
 * @return: 跟返回值的描述
 * @value: 用于标注在常量上,{@value} 用于表示常量的值
 * 此外还有@serial、@serialField、@serialData、{@docRoot}、{@inheritDoc}、{@literal}、{@code} 几个不常用的标签,由于不常使用,我们不展开叙述,感兴趣的读者可以查看帮助文档。
 *
 */

U2-基本程序设计

关键字-final

常量命名后常量值不再改变

final datatype CONSTANTNAME = value;
  1. 变量和方法: 写字母命名,含多个单词则除首单词外其他单词首字母均大写.
  2. 类名: 每个单词的首字母大写. eg.ComputeArea
  3. 常量: 所有字母大写,两单词间用下划线连接. eg.MAX_VALUE

1.数值类型

类型名

范围

存储空间

byte

-2^7 ~ 2^7-1

8位带符号数

short

-2^15 ~ 2^15-1

16位带符号数

int

-2^31 ~ 2^31 - 1

32位带符号数

long

-2^63 ~ 2 ^ 63 - 1

64位带符号数

float

32位标准IEEE754

double

64位标准IEEE754

2.从键盘读取数值

eg.从键盘读取一个double类型的val

Scanner input = new Scanner(System.in);
double val = input.nextDouble();
System.out.println(val);

方法

描述

方法

描述

nextByte()

读取一个byte类型的整数

nextLong()

读取一个long类型整数

nextShort()

读取一个short类型整数

nextFloat()

读取一个float类型浮点数

nextInt()

读取一个int类型整数

nextDouble()

读取一个double类型浮点数

U3-选择

1.使用Math.random()

Math.random产生[0~1)之间的随机double值,据此可形成多种变换得到所需随机数.

eg.

double num = Math.random();

int a, b;
int val1 = (int)Math.random()*10; //获取[0~10)之间的随机整数
int val2 = a + (int)Math.random()*b; //获取[a~a+b)之间的随机整数
...

2.Random类

利用random类可生成随机boolean,int,long,float,double值

int,long范围为其数值范围(int可自我指定上界,此时范围为[0~bound) )

float,double范围为[0~1)

eg.

Random rand = new Random();//声明

boolean val1 = rand.nextBoolean();
...

eg.

switch(status){
case 0: compute...;
    break;
case 1: ...
    break;
...

default: ...;//例外情况
}

status必须能计算处一个char/byte/short/int/String型值

  1. 后置操作符 eg.val++;
  2. 前置操作符 eg.++val;
  3. 类型转换(显式)
  4. 非运算 !
  5. * / %
  6. 二元 + -
  7. 比较操作符 < <= …
  8. 相等操作符 == !=
  9. 异或 ^
  10. 条件与 &&
  11. 条件或 ||
  12. 赋值操作符 = += *= …

U4-数学函数,字符与字符串

//三角函数方法
    double x = 0, y = 0;
    double val = 0;
    val = Math.sin(3.1415926544);//默认的sin,cos,tan都是以弧度进行计算的
    val = Math.asin(1); //asin,acos,atan都是反三角函数
    val = Math.toDegrees(3.14159265450959);//弧度转角度
    val = Math.toRadians(180);//角度转弧度
    System.out.println(val);

    //指数方法
    val = Math.exp(x); //求e的指数
    val = Math.log(x); //求自然对数(e为底)
    val = Math.log10(x); //求以10为底数
    val = Math.pow(x, y); //求x^y
    val = Math.sqrt(x); //求x的平方根

    //取整方法
    val = Math.ceil(x); //向上取整
    val = Math.floor(x); //向下取整
    val = Math.rint(x); //x取最接近其的整数,若距离相等则优先取偶数
    val = Math.round(x); //等效于Math.floor(x+0.5)

    //min,max,abs

    //random方法
    val = Math.random(); //返回[0,1)之间的一个随机double
    int a = 0, b = 0;
    int num = a + (int)Math.random() * b; //取[a,a+b)之间的一个随机整数

1.转义序列

一些常见的转义序列

转义序列

名称

Unicode码

十进制值

\b

退格键

\u0008

8

\t

Tab键

\u0009

9

\n

换行符

\u000A

10

\f

换页符

\u000C

12

\r

回车符

\u000D

13

\

反斜杠

\u005C

92

"

引号

\u0022

34

eg.打印He said "Java is fun"

System.out.println("He said \"Java is fun\"");

2.字符型数据与数值型数据之间的转换

1.基础转换:基于ascii码的转换

(1)数值->字符:整形转换只用到该数据的低16位,其余部分被忽略;浮点数转换时先转int(10),在转成char.

最终都根据ascii码找到对应的char值赋给字符

(2)字符->数值:

eg. A

int i = (char)'A';
//i = 65 (A的ascii码值)

注:若转化结果符合数值数据范围,可以隐式转换.否则必须显式转换

eg.\uFFF4为两个字节,不能隐式地用byte(一个字节的范围)来表示,故:

byte b = (byte)'\uFFF4';

2.字符的比较与测试

(1)比较:字符之间的比较是根据ascii值来进行比较的

(2)测试:Java提供Charact类进行字符测试,如下:

方法

描述

isDigit(ch)

ch为数字则返回true

isLetter(ch)

ch为字母返回true

isLetterOrDigit(ch)

字母/数字

isLowerCase(ch)

小写字母

isUpperCase(ch)

大写字母

toLowerCase(ch)

返回ch的小写形式

toUpperCase(ch)

返回ch的大写形式

3.String类型

eg.

String message = "Java";

(1)概述:String为Java库中的一个预定义的类,不是基本类型而是引用类型.

这里message是一个引用变量,引用一个呢欧容为Java的字符串对象.

(2)方法:

方法

描述

length()

返回字符串的字符数

charAt(index)

返回index处的字符

concat(s1)

将本字符串与s1拼接,返回拼接后的字符串

toUpperCase()

返回一个将本字符串所有字母大写的字符串

toLowerCase()

trim()

返回将原字符串去掉两边空白字符的字符串

注:拼接也可简单地用+来实现

eg.

String s3 = s1 + s2; //等效于s1.concat(s2)
String my = message + " and " + "HTML";

(3)从控制台获取字符串:

eg.

Scanner input = new Scanner(System.in);
String s1 = input.next();

(4)字符串比较:

方法

描述

equals(s1)

若该字符串等于字符串s1,返回true

equalsIgnoreCase(s1)

不区分大小写的比较

compareTo(s1)

返回一个>/=/<0的整数,表明该字符串是否>//=/< s1

compareToIgnoreCase(s1)

不区分大小写的比较

startsWith(prefix)

若字符串以prefix前缀开始返回true

endsWith(suffix)

以suffix结束返回true

contains(s1)

字符串包含s1返回true

注:不可用==来比较两个字符串是否相等

==知识判断两个字符串是否指向同一个对象,而不是判断两个字符串的内容是否相等

(5)获取子串

方法

描述

substring(beginIndex)

返回从指定位置到结束的该字符串

substring(beginIndex,endIndex)

返回[begin,end)的子串

(6)获取字符串中的字符或子串

方法

描述

indexOf(ch)

返回字符串出现的第一个ch的下标,若无则返回-1

indexOf(ch, fromIndex)

返回从fronIndex开始第一个出现的ch的下标;-1

indexOf(s)

返回出现的第一个字符串s的下标;-1

indexOf(s, fromIndex)

lastIndexOf(ch)

最后一个ch;-1

lastIndexOf(ch, fromIndex)

之前最后一个;-1

lastIndexOf(s)

字符串…

lastIndexOf(s, fromIndex)

(7)字符串和数字之间的转换

int intVal = Integer.parseInt(intString);//将intString转化为int类型
double doubleVal = Integer.parseDouble(doubleString);//...

String s = number + ""; //将number转化为字符串(只需用连接操作符)

(1)格式限定符:

限定符

输出

eg

%b

布尔值

true

%c

字符

'a'

%d

十进制整数

23

%f

浮点数

43.22

%e

科学计数法型数

4.556000e+01

%s

字符串

"Java"

(2)限定宽度与精度:

eg

输出

%5c

输出字符并在字符前加4个空格

%6b

输出布尔值,false前加一个空格,true前加两个

%5d

若整数宽度小于5则在前追加空格,大于5则自动增加宽度

%10.2f

输出浮点数宽度至少为10,若小数点前数字小于7则前追加空格,大于则自动增加宽度(xxx.xx 3+1(.)+2)

%10.2e

%12s

U5-循环

主要记录do-while(没怎么用过)

do-while

eg.

do{
    ...;
}while(...);

与while的差别主要在于:

do-while先执行一次循环再做鉴别;

while先鉴别再执行循环;

do-while;