java-基本程序设计结构

注意
本文档属于个人笔记,个人水平有限,请酌情采纳,有任何错误可在评论区指出
 1public class Main  {
 2    public static void main(String[]args) {
 3        // 2进制表示--10进制为3
 4        System.out.println(0b0011);
 5        // 16进制表示--10进制为14
 6        System.out.println(0xe);
 7        // 8进制表示--10进制为8
 8        System.out.println(010);
 9        // 可以在数字中加下划线便于阅读
10        System.out.println(100_100_100);
11        // 长整型可以加一个'L'作为后缀
12        System.out.println(1000000000L);
13        // float类型的浮点数后面使用后缀'F',double类型的浮点数后面使用后缀'D',
14        System.out.println(0.01F);
15        System.out.println(0.01D);
16
17    }
18}

Arrays.copyof(原始数组,新数组的长度)

如果数组元素是数值型,那么多余的元素将被赋值为0 ; 如果数组元素是布尔型, 则将赋值为false。相反, 如果长度小于原始数组的长度,则只拷贝最前面的数据元素。

 1import java.util.Arrays;
 2
 3public class Main  {
 4    public static void main(String[]args) {
 5        int[] arr = {1,2,3,4,5};
 6        int[] cloneArr = arr;
 7        int[] p = Arrays.copyOf(arr,arr.length);
 8        arr[1] = 10;
 9
10        for (int num: arr) {
11            System.out.printf(num + " ");
12        }
13
14        System.out.println();
15
16        for (int num: cloneArr) {
17            System.out.printf(num + " ");
18        }
19
20        System.out.println();
21
22        for (int num: p) {
23            System.out.printf(num + " ");
24        }
25    }
26}

输出:

11 10 3 4 5 
21 10 3 4 5 
31 2 3 4 5 
 1import java.util.Arrays;
 2import java.util.Collections;
 3import java.util.Comparator;
 4
 5public class InterfaceTest {
 6    public static void main(String[] args) {
 7        Integer[] arr = {19,67,55,9,20,35};
 8        // 升序排序
 9        Arrays.sort(arr);
10        System.out.println(Arrays.toString(arr));
11        // 降序排序
12        // 第一种方法:Collections.reverseOrder()
13        Arrays.sort(arr, Collections.reverseOrder());
14        System.out.println(Arrays.toString(arr));
15
16        // 第二种方法:实现Comparator接口
17        Arrays.sort(arr, new Comparator<Integer>() {
18            @Override
19            public int compare(Integer o1, Integer o2) {
20                // o1.compare(o2)返回正数,说明o1比o2大
21                // 正序排序: o1 - o2 > 0
22                // 降序排序: o2 - o1 > 0
23                // return Integer.compare(o2,o1);
24                return o2 - o1;
25            }
26        });
27
28        // 更简洁的写法: lambda表达式
29        Arrays.sort(arr, (o1,o2) -> o2 - o1);
30        System.out.println(Arrays.toString(arr));
31
32    }
33}

每一行的数据长度可以不相等,创建多维数组时必须指定行数

 1import java.util.Arrays;
 2
 3public class Main  {
 4    public static void main(String[]args) {
 5        final int MAX = 10;
 6        // 指定行数
 7        int[][] arr = new int[MAX][];
 8        // 分配行的长度
 9        for (int i = 0; i < MAX; i++) {
10            arr[i] = new int[i+1];
11        }
12        
13        for (int i = 0; i < MAX; i++) {
14            for (int j = 0; j <= i; j++) {
15                arr[i][j] = j+1;
16            }
17        }
18        for (int[] row : arr) {
19            for (int val: row) {
20                System.out.print(val + " ");
21            }
22            System.out.println();
23        }
24        
25        // 快速打印二维数组的值
26        System.out.println(Arrays.deepToString(arr));
27    }
28}

交换数组的任意两行

 1import java.util.Arrays;
 2
 3public class Main  {
 4    public static void main(String[]args) {
 5        int[][] arr = {{1,2,3},{4,5,6,7}};
 6        int[] tmp = arr[0];
 7        arr[0] = arr[1];
 8        arr[1] = tmp;
 9        System.out.println(Arrays.deepToString(arr));
10    }
11}

二维数组复制

1public class Main  {
2    public static void main(String[]args) {
3        int[][] arr = {{1,2,3},{4,5,6,7}};
4        // 长度为行数
5        int[][] arr_copy = Arrays.copyOf(arr,2);
6        System.out.println(Arrays.deepToString(arr_copy));
7    }
8}
1String ans = String.join(",","hello","are","you","ok"); // 使用逗号分隔字符串
2System.out.println("hello".equalsIgnoreCase("HEllo")); // true 不区分大小写比较 
 1import java.io.Console;
 2
 3public class Main  {
 4    public static void main(String[]args) {
 5        Console console = System.console();
 6        String str = console.readLine("User name: ");
 7        char[] password = console.readPassword("password: ");
 8        System.out.println(str);
 9        for (int i = 0; i < password.length; i++) {
10            System.out.println(password[i]);
11        }
12    }
13}

对第i个参数多次不同的格式化输出

 1import java.util.Date;
 2
 3public class Main  {
 4    public static void main(String[]args) {
 5        String name = "Alice";
 6        int age = 18;
 7        String message = String.format("Hello %s,Next year you will be %d",name,age+1);
 8        System.out.println(message);
 9        System.out.printf("%.2f%%\n",20*100/100.0);
10        System.out.printf("%1$s %2$tB %2$te, %2$tY\n", "Due date:", new Date());
11        System.out.printf("%1$.2f,%1$.3f,%1$.4f",100/3.0);
12    }
13}

标签必须放在希望跳出的最外层循环之前, 并且必须紧跟一个冒号:

可以将一个标签放在想要跳到的语句块之前,类似于goto的作用

 1import java.util.Scanner;
 2
 3public class Main  {
 4    public static void main(String[]args) {
 5        Scanner sc = new Scanner(System.in);
 6        int n = sc.nextInt();
 7        label:
 8        for (int i = 0; i < n; i++) {
 9            if (i == 10) {
10                System.out.println(i);
11                break label;
12            } else {
13                System.out.println(i);
14            }
15        }
16    }
17}
 1import java.math.BigInteger;
 2
 3public class Main  {
 4    public static void main(String[]args) {
 5        // 使用字符串创建大整数
 6        BigInteger bigInteger = new BigInteger("11111111111111111111111111111111111111111111111111111111");
 7        // 最大只支持long
 8        BigInteger bigInteger1 = BigInteger.valueOf(111111111);
 9        // 四则运算+取模
10        System.out.println(bigInteger.add(bigInteger1));
11        System.out.println(bigInteger.subtract(bigInteger1));
12        System.out.println(bigInteger.multiply(BigInteger.valueOf(1111111)));
13        System.out.println(bigInteger.divide(new BigInteger("11111111")));
14        System.out.println(bigInteger.mod(bigInteger1));
15    }
16}
1// 匹配一个或多个空格
2String [] words = sentence.split("\\s+");
3for (String s : words) {
4    System.out.println(s);
5}

BufferedReader读入数据

BufferedWriter输出数据

IO数据大的时候替换Scanner输入和System.out输出

 1import java.io.*;
 2
 3public class Main {
 4    public static void main(String[] args) throws Exception {
 5        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 6        String str = br.readLine(); // 一行一行读入
 7        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 8        bw.write(str);
 9        bw.write("\n");
10        bw.flush(); // 记得刷新缓存
11    }
12}

可变字符串,String是不可变字符串

 1public class Main {
 2    public static void main(String[] args) {
 3        StringBuffer sb = new StringBuffer("hello ");
 4        sb.append("world!");
 5        System.out.println(sb);
 6        // 字符串反转,String没有这个方法
 7        System.out.println(sb.reverse());
 8        StringBuilder builder = new StringBuilder("AAA");
 9        builder.append(" BBB");
10        System.out.println(builder);
11    }
12}