书籍:《Java核心技术卷I 基础知识》
内容:第三章3.8-3.9 第四章4.1-4.2
主要内容:选择,循环,数组,BIGINTEGER 大数值
笔记: 第三章部分:
import java.io.*; // 使用Console类
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.nio.file.*; //使用Paths
import java.util.*; // Scanner类
import static java.lang.Math.*;
public class Arknights {
public static void main(String[] args) {
System.out.println(114514);
//if-else 语句和while,for循环略
//带标签的break
Scanner in = new Scanner(System.in);
//演示
{
int n;
int i = 0;
read_data:
//标签
while (i < 10) {
for (int j = 1; j <= 10; j++) {
System.out.println("Enter a number >= 0 :");
n = in.nextInt();
if (n < 0)
break read_data;
i += 2;
}
}
}
//事实上,标签可以应用到任何语句,甚至是if语句或者块语句中
//BIGINTEGER 大数值
BigInteger b = BigInteger.valueOf(114514);
BigInteger a = BigInteger.valueOf(100); // 使用valueOf将普通数值转化为大数值
//运算
BigInteger c = a.add(b);
BigInteger d = c.multiply(b.add(BigInteger.valueOf(1919810)));
System.out.println("a = " + a + ", b = " + b + ", c = " + c + ", d = " + d);
//数组
int[] q;//声明数组
int[] w = new int[10]; //创建数组
int num = 114;
int e[] = new int[num]; //C风格的数组声明,数组的长度可以为int变量
for (int i = 0; i < w.length; i++) {
w[i] = i;
}
int[] ssmall = {1, 2, 5, 6, 8, 8};
int[] small;
small = new int[]{10, 45, 7, 96, 21}; // 初始化匿名数组
//java中允许数组长度为0
//数组拷贝,两个变量将引用同一个数组
int[] A = small;
System.out.println(A[2]);
System.out.println();
//如果拷贝所有值
int[] copySmall = Arrays.copyOf(small, 2 * small.length);//第二个参数为数组长度
//数组排序
Arrays.sort(small);
for (int i : small) {
System.out.println(i);
}
System.out.println();
//随机数
{
int n = 7, k = 2;
int[] numbers = new int[n];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i + 1;
}
int[] result = new int[k];
for (int i = 0; i < result.length; i++) {
int r = (int) (random() * n);
result[i] = numbers[r];
numbers[r] = numbers[n - 1];//用最后一个数填充随机位
n--;
}
System.out.println("Random int:");
//for each 循环
for (int r : result) {
System.out.println(r);
}
System.out.println();
// static int binarySearch (type[] a,int start, int end,type v) 采用二分查找查找值v,查找成功返回下标值,否则返回负数值r,其-r-1是为保持a有序v应插入的位置 ,查找范围:[start , end) ,start 和 end 可省略。
//java的二维数组实际上是数组的数组,可以交换两行内容
}
{
//不规则数组
final int NMAX = 10;
int[][] odd = new int[NMAX + 1][];
for (int i = 0; i <= NMAX; i++) {
odd[i] = new int[i + 1];
}
for (int i = 0; i < odd.length; i++) {
for (int j = 0; j < odd[i].length; j++) {
int lo = 1;
for (int k = 1; k <= j; k++) {
lo = lo * (i - k + 1) / k;
}
odd[i][j] = lo;
}
}
for (int[] row : odd) {
for (int od : row) {
System.out.printf("%4d", od);
}
System.out.println();
}
}
}
}
第四章部分:
import java.io.*; // 使用Console类
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.nio.file.*; //使用Paths
import java.time.LocalDate;
import java.util.*; // Scanner类
import static java.lang.Math.*;
public class C4 {
public static void main(String[] args) {
//Date类
new Date();//构造器名字与类名相同,在构造器前加new字符.初始化了一个新对象,此对象被胡世华为当前日期时间
System.out.println(new Date());//将此对象传递给一个方法
String s = new Date().toString();//toString 方法,返回字符串描述
Date birthday = new Date();//为了构造的对象能多次使用,存放在一个变量内
System.out.println(s);
/*
* 对象变量不是对象,也没有引用变量,不能将任何类的方法应用于其上
* 一定要认识到:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象.
* */
//Eg .
Date deadline = new Date(); //表达式 new Date() 构造了一个Date类型的对象,并且它的值是对新创建对象的引用.这个引用存储在变量 deadline中。
//LocalDate类
LocalDate.now();//使用静态工厂方法代表调用构造器.
LocalDate newYearEve = LocalDate.of(1999, 12, 31);
int y = newYearEve.getYear();
int m = newYearEve.getMonthValue();
int d = newYearEve.getDayOfMonth();
System.out.println("NewYearEve:" + y + "." + m + "." + d);
LocalDate _1000D_later = newYearEve.plusDays(1000);
y = _1000D_later.getYear();
m = _1000D_later.getMonthValue();
d = _1000D_later.getDayOfMonth();
System.out.println("_1000D_later:" + y + "." + m + "." + d);
}
}