1. 程式人生 > 其它 >Java大數類的使用

Java大數類的使用

技術標籤:java

ACM中使用,不介紹OOP(面向物件程式設計)
部分概念只為了快速使用理解,並不準確

文章目錄

java基本語法:

基本結構:

import java.math.BigDecimal; // 匯入工具類的包,和#include<queue>那些一樣的作用
import java.math.BigInteger;
import java.lang.String;

public class Main {
	
	static
int a; // 全域性變數 public static void main(String[] args) { // 核心程式碼 int b; // 區域性變數 } }

public class MainMain代表是一個類,這裡需要引入OOP面向物件的概念。在學習java語言之前這樣寫即可,在ACM中一般這個Main是不能改的。

public static void main是程式的入口函式,相當於C語言int main(void)

如果想要宣告一個全域性變數,就要寫在Main類裡面,main函式之外,並且要加static,這裡固定寫即可(原因在於java程式載入,暫時不用管)

如果想要宣告區域性變數,將public static void main當成main函式往裡面寫就行了

基本資料型別:

java擁有八種基本型別:

  1. short
  2. int
  3. long
  4. byte
  5. char
  6. boolean
  7. float
  8. double

使用方法和C語言無差異,如下:

public class Main {
    public static void main(String[] args) {
        int a = 10; // -2147483648 ~ 2147483647的範圍
        // 浮點數直接用double即可
        double b = 10.5;
        boolean
flag = true; // 布林型別 // char型別一般用不到,後面面會介紹String字串 } }

分支語句:

也和C語言沒什麼區別,如下:

public class Main {
    public static void main(String[] args) {

        boolean flag = true;

        if (flag) {
            System.out.println("判斷條件為真");
        } else {
            System.out.println("判斷條件為假");
        }
    }
}

需要注意在C中可以寫if (5)這種,只要不是0就會判定為真,但是Java中不行,括號內必須為布林值

迴圈語句:

C一樣,有兩種:

  1. while迴圈
  2. for迴圈

用法也是一樣的,如下:

public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i ++ ) {
            System.out.println(i);
        }
    }
}
public class Main {
    public static void main(String[] args) {
        int i = 0;
        while (i < 5) {
            System.out.println(i);
            i ++ ;
        }
    }
}

在這裡插入圖片描述

輸入輸出:

要引入一個概念叫物件,最上面的其實是一個抽象,就類似於,是一個種類,把他例項化之後就叫做物件,就像家裡有一隻貓叫做tom,這個tom就是一個物件。

如果需要輸入的話,就需要一個輸入物件Scanner,將一個貓例項化成tom這個過程需要用new這個關鍵字,關鍵字就類似於C語言的struct return都是關鍵字

所以用Scanner這個物件就需要操作:

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
    }
}

下面展示輸入基本型別:

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        double b = scanner.nextDouble();
        // 其他型別也是一樣的,需要什麼就nextXX()
    }
}

輸出直接看例子就懂了:

public class Main {
    public static void main(String[] args) {
        System.out.println("輸出的第一段話,這句話輸出完會換行");
        System.out.print("將ln去掉,將不會換行");
        System.out.println(); // 這個單純為了換行好看

        int a = 1, b= 2;
        System.out.printf("這裡和C的用法一致,輸出數字%d和%d\n", a, b);
    }
}

在這裡插入圖片描述

陣列:

陣列的寫法可以有下面兩種:

  1. int a[] = {1, 2, 3}; 這種跟C的就比較類似,但是java習慣於第二種寫法
  2. int[] a = {1, 2, 3};

上面是直接做了初始化,如果想要獲取陣列的長度可以直接a.length,這裡注意沒括號。

而不做直接的初始化C可以直接宣告int a[100]即可,
但是java需要int[] a = new int[];否則是不能用的

方法(函式):

思想不同,叫法不同而已,java的函式需要的結構如下:

修飾符 其他 返回值 函式名(形式引數) {
}

// ACM中修飾符我們可以不要,暫時不用管他是什麼
// 其他我們需要加個static,這個原因是因為main入口函式固定了static,也不用管
// 所以java和c的區別就在於多了一個static
static int sum(int a, int b) {
	return a + b;
}
// 這樣就可以正常呼叫了

java工具類

String類:

上面說到char基本不會用到,就是因為java封裝了一個和C++一樣的字串類,也是需要一個字串物件操作:

  1. String str = new String();
  2. 或者更簡便的直接賦值String str = "這是字串";

下面列舉常用的方法:

public class Main {
    public static void main(String[] args) {
        String str = "這是一段字串";

        // 判斷字串是否包含其他的字串
        if (str.contains("字串")) {
            System.out.println("str字串中含有字串三個字");
        }

        // 擷取函式,從下標為2擷取到最後
        String substring = str.substring(2);
        System.out.println(substring);

        // 擷取函式的另一種使用方法 從下標為2擷取到下標為(4-1)
        String substring1 = str.substring(2, 4);
        System.out.println(substring1);

        // 分割,用一做分割符,就會分成 "這是" "段字串" 這兩個字串
        String[] s = str.split("一");
        for (int i = 0; i < s.length; i ++ ) {
            System.out.println(s[i]);
        }

        // 替換函式,將一個字串替換成其他的
        str = str.replace("一段字串", "123");
        System.out.println(str);

        // 找到字串的第i位,java的字串不像C++可以直接str[i]
        char c = str.charAt(0);

        // 判斷是否兩個字串相同,這裡不能用==號
        str.equals("另一端字串");

    }
}

大數類:

常用的有整數的大數類浮點數的大數類
如果對的概念還是很模糊就像成一個物種就行了,其實就是一個能操作大數的工具。

  1. 能操作整數的工具:BigInteger
public class Main {
    public static void main(String[] args) {
        // 這個小括號內的叫實參,和c裡面呼叫函式時傳遞的那個引數一樣
        // 這裡需要一個字串,但是這個字串必須是一個數字
        BigInteger a = new BigInteger("15000000000000000000000000");
        // 判斷是否兩個數相同
        boolean equals = a.equals("15000000000000000000000000");
        boolean equals2 = a.equals(new BigInteger("15000000000000000000000000"));
        // 取模運算
        a = a.mod(new BigInteger("150"));
        System.out.println(a);
        // 下面是加減乘除
        a.add(new BigInteger("100")); // + 100
        a.subtract(new BigInteger("100")); // -100
        a.multiply(new BigInteger("200")); // * 200
        a.divide(new BigInteger("200")); // 除200
        // 需要注意的是都要用a = a.xxx(new BigInteger()); 這種寫法,要用a=再去賦值一遍,否則原數不會變

        a = a.abs();// 絕對值
    }
}
  1. 能操作浮點數的工具:BigDecimal
public class Main {
    public static void main(String[] args) {
        // 需要注意的是這個物件可以通過字串來模擬出沒有精度錯誤的浮點數,在C++中某些浮點數是無法儲存的,一定有誤差
        BigDecimal a = new BigDecimal("120.841684848484898498489495");
        System.out.println(a);

        a = a.abs(); // 絕對值

        // 加減乘除都和BigInteger一樣,將引數換成new BigDecimal即可
        a = a.add(new BigDecimal("150"));
        System.out.println(a); // 270.841684848484898498489495

        // 比較誰大
        BigDecimal b = new BigDecimal("130.6");
        System.out.println(a.compareTo(b)); // a比較b, 如果a大返回1,b大返回-1,相等返回0


        System.out.println(a.max(b)); // 返回a和b大的
        System.out.println(a.min(b)); // 返回a和b小的
    }
}