java

使用簡單資料結構演示java基礎語法


基礎語法


Main.java
public class Main{
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}
 
在終端輸入javac Main.java
會產生java.class =>這具有java運行時環境的操作系統(JRE)
 
在java.com所下載的稱為java虛擬機(jvm)
jvm會獲取我們java Byte code轉換程Native code(windows,mac)
 

Basic for java


typeBytesRange
byte1-128~127
short2-32K~32K
int4-2B~2B
long8
float4
double8
char2
boolean1
public class Main{
 
 public static void main(String[] args){
    long view = 3_123_456_789; //報錯
    //java默認下將這些數字視為整數,認為數字太大.在句尾加上L or l 就能解決
 
  }
}
 
//type
public class Main{
    public static void main(String[] args){
        byte age = 30;
        long viewsCount = 3_123_456_789L;
        float price = 10.99F;//java默認為雙晶,在後面加F or f 才能用float
        char letter = 'A';
        boolean isEqual = true;
    }
}
 
/*
 
*/

Point


import java.awt.*;
public class Main{
    public static void main(String[] args){
        Point point1 = new Point(1,1);//類似指針
        Point point2 = point1;
        //point1 point2指向相同地址
        point1.x = 2;
        System.out.println(point2.x);
    }
}
 
//將指針 * 轉為point

String


public class Main{
    public static void main(String[] args){
        String message = " hello world!" + "peter ";
        System.out.println(message.endsWith("hello world")); //endsWith檢查字尾的字串,是的話返回true
        System.out.println(message.startsWith("hello world")); // startWith檢查字頭,是的話返回true
        System.out.println(message.length());
        System.out.println(message.indexOf("h")); //0
        System.out.println(message.replace("peter","amy"));//返回心字串,並不更改原字串
        System.out.println(message.toUpperCase());//轉大寫
        System.out.println(message.trim());//去除字頭和字尾的空格
 
    }
}
 
public class Main{
    public static void main(String[] args){
        String msg = "c:\\Window\\..."; //c:\Window\...
        String message = "hello \"peter\""; //hello "peter"
        System.out.println(message);
        System.out.println(msg);
    }
}

Array


import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) {
        // 不應該對術組進行修改或刪除
 
        int[] numbers = new int[5];
        numbers[0] = 1;
        numbers[1] = 2;
        System.out.println(numbers);
        //打印出亂數是因爲Java返回的字符串是根據該對象的地址計算,每個對象都在不同的內存
        //需要調用Arrays
 
        System.out.println(Arrays.toString(numbers));
 
        int[] numbers2 = {1,2,5,12,10};
        System.out.println(Arrays.toString(numbers2));
        System.out.println(numbers2.length); //5
 
        Arrays.sort(numbers2);//排序
        System.out.println(Arrays.toString(numbers2));
    }
}
 
/*
 
*/
 
多維陣列
import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) {
        int[][] numbers = new int[2][3];
        numbers[0][0] = 1;
        System.out.println(Arrays.deepToString(numbers));
        //toString只能用在一為陣列,一為以上要用deepToString
 
        int [][] numbers2 = {{1,2,3},{4,5,6}};//第一個{}代表第一個[]
        System.out.println(Arrays.deepToString(numbers2));
    }
}
 
/*
 
*/

Const


public class Main {
    public static void main(String[] args) {
        final float PI = 3.14f; //視為const,const use 大寫
    }
}

算術運算符


 
public class Main {
    public static void main(String[] args) {
        double num = 10 / 3; //3.0
        double num2 = (double)10 / (double)3;//3.3333333
        System.out.println(num);
        System.out.println(num2);
 
        int x = 1;
        int y = x++ ;
        System.out.println(x);//2
        System.out.println(y);//1
    }
}
/*
 
*/

類型轉換


public class Main {
    public static void main(String[] args) {
        //Implicit casting
        //byte > short > int > long > float > double
        short x = 1;
        int y = x +2 ;
        System.out.println(y);//3 處理兩種不同類型
        //java看到變量中的值為1,將他分配到匿名變亮,java copy x 然後相加 =>隱式轉換
 
        double a = 1.1;
        double b = a + 2;//此時將2(int)轉換成2.0(double)再相加
        int c = (int)b + 2;//顯示轉換,輸出5
        System.out.println(c);
 
        String num = "1";
        int age = 12;
        int who = Integer.parseInt(num) + age; //string沒辦法顯示轉換,要調用包來轉換
        System.out.println(who); //13
    }
}
/*
 
*/

Math


public class Main {
    public static void main(String[] args) {
        int result = Math.round(1.1F);//1
        int result2 = (int)Math.ceil(2.5F);//大於這個的最小整數
        int result3 = (int) Math.floor(2.5F);// 小於這個的最小整數
        int result4 = Math.max(1, 2);//返回大的數,min就返回小的數
 
        double result5 = Math.random()*100;//產生0~1的隨機數,如果要增加範圍就*增加到的那個數
        double result6 = Math.round(Math.random()*100);//取四捨五入到小數點第一位
        //round不能發生隱式轉換
        int result7 = (int)Math.round(Math.random()*100);//轉乘int
        int result8 = (int) Math.random() * 100;//輸出0,因為每一次產生的都是0~1之間,取整數後0*any = 0
        int result9= (int) (Math.random() * 100); //產生0~100隨機數
        System.out.println(result2);
        System.out.println(result3);
        System.out.println(result5);
        System.out.println(result6);
        System.out.println(result7);
        System.out.println(result8);
        System.out.println(result9);
    }
}
/*
 
*/

Number format


import java.text.NumberFormat;
 
public class Main {
    public static void main(String[] args) {
       // 10%
        NumberFormat currency =  NumberFormat.getCurrencyInstance();
        String result = currency.format(1234567.89); // $1,234,567.89
        System.out.println(result);
 
        NumberFormat percent = NumberFormat.getPercentInstance();
        String result2 = percent.format(10); // 10%
        System.out.println(result2);
 
        String result3 = NumberFormat.getNumberInstance().format(123);
        System.out.println(result3);
    }
}
/*
 
*/

Scanner


import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Name: ");
        String name = scanner.nextLine().trim();
        System.out.println("u r "+name);
    }
}
/*
 
*/

for each

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        String[] fruits = {"appele","banana","orange"};
 
        for (int i = 0;i<fruits.length;i++)
            System.out.println(fruits[i]);
 
        for(String fruit : fruits) //將fruits裡面的值存放到fruit裏
            System.out.println(fruit);
    }
}
/*
 
*/

基本資料結構


Array

import java.util.*;
 
public class DataStruct {
    public static void main(){
        // Array
        int[] nums = new int[10];
        nums[0] = 1;
        System.out.println("1.Array");
        //打印array內容
//        for (int n : nums){
//            System.out.println(n);
//        }
        System.out.println(nums[0]);
        System.out.println(Arrays.toString(nums));
        System.out.println(nums.length);
    }
}

String

import java.util.*;
 
public class DataStruct {
    public static void main(){
 
   //String
        String s = new String("hello world");
        s = new String(new char[]{'h','e','l','l','o'});
        System.out.println("2.String");
        System.out.println(s);
        System.out.println(s.charAt(0)); //h
        System.out.println(s.substring(0,2));//he ,[0,2)
        System.out.println("a".compareTo("b")); //-1 ,a < b
        System.out.println(s.contains("h")); //true ,是否包含
    }
}

List

import java.util.*;
 
class ListNode{
    int val;
    ListNode next;
    public ListNode(int val){
        this.val = val;
    }
}
 
public class DataStruct {
    public static void main(){
       //ListNode
        //初始化
        ListNode head = new ListNode(0);
        //賦值
        head.next = new ListNode(1);
        System.out.println("3.ListNode");
        //取值 head.val
        while(head != null){
            System.out.println(head.val);
            head = head.next;
        }
 
    }
}

BinaryTree

import java.util.*;
 
class TreeNode{
    int val;
    TreeNode right;
    TreeNode left;
    public TreeNode(int val){
        this.val = val;
    }
}
 
public class DataStruct {
    public static void main(){
         //Tree
        //初始化
        TreeNode root = new TreeNode(0);
        root.left = new TreeNode(1);
        root.right = new TreeNode(2);
        root.left.left = new TreeNode(3);
        root.left.right = new TreeNode(4);
        System.out.println("4.Tree");
        /*
        *       0
        *      / \
        *     1   2
        *    / \
        *   3   4
        * */
 
    }
}

Stack

import java.util.*;
 
public class DataStruct {
    public static void main(){
 
        //Stack,甲骨文doc推薦使用Deque取代stack
        //Stack常用於實現DFS
        //初始化
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.add(3); //更推薦用push
        System.out.println("5.Stack");
        System.out.println(stack.peek()); //只看輾頂不移除元素
        System.out.println(stack.pop()); //輾頂元素彈出來
        System.out.println(stack.pop()); //輾頂元素彈出來
        System.out.println(stack.pop()); //輾頂元素彈出來
        System.out.println(stack.isEmpty());; //檢查是否為空
    }
}

Queqe

import java.util.*;
 
public class DataStruct {
    public static void main(){
 
        //Queue
        //Queue常用來實現BFS
        //初始化
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1); //推薦使用offer而不是add
        queue.offer(2);
        queue.add(3);
        System.out.println("6.Queue");
        System.out.println(queue.peek());//讀取先進元素且不移除
        System.out.println(queue.poll());//移除先進元素,推薦使用poll而非remove,poll處理了空不會報錯
        System.out.println(queue.poll());
        System.out.println(queue.remove());
        System.out.println(queue.poll()); //以為空輸出null
 
    }
}

Deque

import java.util.*;
 
public class DataStruct {
    public static void main(){
 
        //Deque
        //Deque和Queue最大的差別在不止從頭獲取資料,也能從尾獲取
        //初始化
        Deque<Integer> deque = new LinkedList<>();
        deque.offerLast(1);
        deque.addLast(2);
        deque.offerFirst(3);
        System.out.println("7.Deque");
        System.out.println(deque.peekFirst());
        System.out.println(deque.pollFirst());
        System.out.println(deque.pollLast());
    }
}