iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
0
自我挑戰組

練習程式系列 第 16

java 物件導向練習 、 Graph BFS & DFS、Tree

  • 分享至 

  • xImage
  •  

教學來源:
Java static,final 基本概念
protected 成員

Java程式設計領域,早就有許多良好命名慣例,沒有遵守慣例並不是錯,但會造成溝通與維護的麻煩。以類別命名實例來說,首字是大寫,以static使用慣例來說,是透過類別名稱與.運算子來存取。在大家都遵守命名慣例的情況下,看到首字大寫就知道它是類哵,透過類別名稱與.運算子來存取,就會知道它是static成員。

所以Class首字要大寫是慣例。

Java文件: https://docs.oracle.com/javase/8/docs/api/

System是class,而out和in是static方法:
https://ithelp.ithome.com.tw/upload/images/20190925/20111994sSUF10cE1B.png

練習instanceof:
instanceof-判斷物件繼承關係的小指令
Java instanceof 和 Class.isAssignableFrom(Class<?> cls)的區別

instanceof錯誤的狀況有:
1

class Child extends Parent {}
class Parent {}

class Main extends Child {
 public static void main(String[] args) {
  Child ch = new Child();
  Parent pa = new Parent();
  Main ma = new Main();
  if (ch instanceof ma) {
   System.out.println("ch是子類別,ma是父類別");
  } else {
   System.out.println("false");
  }
 }
}
error: cannot find symbol
    if (ch  instanceof ma) {
                       ^

物件與類別間要有繼承關係,否則會有compile error。這邊兩個都是物件,所以會錯誤。

所以使用isAssignableFrom(Class<?> cls)就可以,因為isAssignableFrom是兩個都放class:

if (ch.getClass().isAssignableFrom(ma.getClass())) {
   System.out.println("ch是父類別,ma是子類別");
}
else {
   System.out.println("false");
}

2

    Long lng = new Long(10);
    if (lng instanceof String) {
      System.out.println("lng 是子類別,String是父類別");
    }
    else {
      System.out.println("false");
    }
 error: incompatible types: Long cannot be converted to String
    if (lng instanceof String) {
        ^

物件與類別間要有繼承關係,否則會有compile error

3

    int[] i = new int[10];
    if (i instanceof Object[]) {
      System.out.println("i是Object[]的後代");
    }
    else {
      System.out.println("i不是Object[]的後代");
    }
error: incompatible types: int[] cannot be convertedto Object[]
    if (i instanceof Object[]) {
        ^

在Java裡有個特別規定,就是任何陣列都繼承Object,所以類別陣列將繼承Object和Object[],一般型別陣列則會繼承Object,但是一般型別不是物件,所以一般型別陣列不會繼承Object[]。

所以這樣就可以:

    Child [] chs = new Child[10];
    if (chs instanceof Object[]) {
      System.out.println("chs是子類別");
    }
    else {
      System.out.println("false");
    }

Graph BFS & DFS

5.1 Graph Traversals - BFS & DFS -Breadth First Search and Depth First Search

Breadth First Search or BFS for a Graph
Depth First Search or DFS for a Graph

整理:
1
DFS用stack , BFS用Queue

2
範例程式DFS是用recursive的方式,沒用stack,之後再來找stack的範例

Prims and Kruskals Algorithms

3.5 Prims and Kruskals Algorithms - Greedy Method

True

檢查是不是binary search tree :

Check if a binary tree is binary search tree or not
98. Validate Binary Search Tree

紅黑樹

Red-Black Trees - Data Structures
目錄:演算法與資料結構

整理
1 descendant leaf = leaf node = NIL = external node

Huffman tree

[Data Structure][Tree] - Huffman tree

Best First Search (Informed Search)

Best First Search (Informed Search)
BFS algorithm example | informed search | AI | Lec-19 | Bhanu Priya

Binary Tree (Array implementation)

Binary Tree (Array implementation)

Binary Tree Inorder Traversal

94. Binary Tree Inorder Traversal
Morris Traversal | Preorder | Tree | C++ | Clear Explanation with Code

AVL Trees

AVL Trees & Rotations (Self-Balancing Binary Search Trees)

Knapsack Problem

0-1 Knapsack Problem | DP-10
Fractional Knapsack Problem

整理:

1
wt – weight – 東西的重量
val – value –東西的價值

2
背包問題 : 重量 小於等於某個值 , 價值最高 , 選擇什麼東西的問題

Queue using Stacks

Queue using Stacks

1
enQueue :排隊,放東西進去、push
deQueue :取消排隊,把東西拿出來、pop

河內塔

有趣的漢諾塔遊戲怎麽玩?把大象放冰箱裏一共分幾步?
2 2 3 遞迴演算法的複雜度估計(河內塔)
Java 河內塔


上一篇
java ,Binary Search 和、計算時間、記憶體 和 c++ tree traversal 、 Binary Search Tree、infix、prefix、postfix
下一篇
Android 拍照並顯示照片
系列文
練習程式37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言