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 Main
的Main
代表是一個類,這裡需要引入OOP
面向物件的概念。在學習java
語言之前這樣寫即可,在ACM
中一般這個Main
是不能改的。
public static void main
是程式的入口函式,相當於C語言
的int main(void)
如果想要宣告一個全域性變數,就要寫在Main
類裡面,main
函式之外,並且要加static
,這裡固定寫即可(原因在於java
程式載入,暫時不用管)
如果想要宣告區域性變數,將public static void main
當成main
函式往裡面寫就行了
基本資料型別:
java擁有八種基本型別:
- short
- int
- long
- byte
- char
- boolean
- float
- 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
一樣,有兩種:
while
迴圈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);
}
}
陣列:
陣列的寫法可以有下面兩種:
int a[] = {1, 2, 3};
這種跟C
的就比較類似,但是java
習慣於第二種寫法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++
一樣的字串類,也是需要一個字串物件
操作:
String str = new String();
- 或者更簡便的直接賦值
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("另一端字串");
}
}
大數類:
常用的有整數的大數類和浮點數的大數類
如果對類
的概念還是很模糊就像成一個物種就行了,其實就是一個能操作大數的工具。
- 能操作整數的工具:
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();// 絕對值
}
}
- 能操作浮點數的工具:
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小的
}
}