今天在學圖論的最小生成樹,開始一直在想是用鄰接矩陣還是關聯矩陣來表示圖,但是發現這樣都會有好多空間浪費。於是我就自定義一個邊的類,里面包含了權值,關聯的端點1,端點2,和圖的表示字母。發現我想創建11條邊,Bian[] = new Bian[11]時; 然后調用Bian[0].v一直報空指針異常,還百度了,發現有些小伙伴和我遇到一樣的問題。於是仔細想了想,發現在java中,數組存放的是這個類型的對象,萬物皆對象。我定義Bian[] 時里面應該要存放Bian[]類型先。例如以下程序
import java.util.Scanner; class Bian{ int v; //邊的權值 int guanlian[] = new int[2];//每條邊都是關聯2個點 char xuhao; } public class Test { public static void main(String[] args) { System.out.println("請輸入這個圖有幾條邊:"); //用關聯矩陣表示圖 Scanner scn = new Scanner(System.in); int n = scn.nextInt(); Bian bian[] = new Bian[n]; //初始化了這么多條邊,則開始輸入 for(int i=0;i<n;i++){ bian[i] = new Bian(); //要先創建這個對象放在這個數組中才能使用 bian[i].v = scn.nextInt(); bian[i].guanlian[0] = scn.nextInt(); bian[i].guanlian[1] = scn.nextInt(); bian[i].xuhao = (char) ('a'+i); } } }
以后大家要記住咯