Re: [問題] 關於三角形座標和面積

看板java作者 (qqaa)時間13年前 (2012/10/04 20:31), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
※ 引述《TWTRubiks (阿哲)》之銘言: : 剛接觸java不到一個禮拜.....想請為各位大大 : 老師出了一個作業 http://db.tt/0AJ31y88 (不知我有沒有抄錯) : 我的程式碼,不過座標印不出來(亂碼),想請問我這樣的程式算正確嗎?! 其實你看到的並不是亂碼,而是其他的東西 ... : public void printTriangle(){ : System.out.println(A); : System.out.println(B); : System.out.println(C); 問題出在這裡,簡單的解法是,你可以在這裡直接改成呼叫 A.printP(); B.printP(); C.printP(); -----------------其他方法---------------- 關於你看到的「亂碼」,其實是有原因的,解決方法也有, 不過應該是你還沒學到的東西 在這裡你想要印出 A, B, C 的座標,不過,在呼叫 println(A) 的時候, java 其實不知道要如何印出 A , java 的做法是,先把 A 變成字串 (String) ,再把這個字串印出來 也就是你的這一行會相當於是 System.out.println(String.valueOf(A)); 在 A 不是 null 時,上面這一行又相當於 System.out.println(A.toString()); 那 A.toString() 是什麼呢? 這個函數是從 Point 的父類別 Object 繼承而來, http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#toString() 在這裡你可以看到 Object.toString() 的說明 你看到的應該是像 Point@247cb66a 這一類的東西,如文件所說的, 前面的 Point 是 class name ,後面的 247cb66a 則是某種 hashCode 。 如果你希望 System.out.println(A) 印出 (0, 0) 之類的東西, 你就要改變 Point.toString() 的實作方式, 子類別可以改變他從父類別繼承來的函數的實作方式, 這個機制叫做 method overriding 方法是,你在 Point 中加入一個新的函數 class Point { ... public String toString() { return "(" + x + " , " + y + ")"; } } 這樣一來, System.out.println(A.toString()); 就不再是呼叫 Object.toString() 而是呼叫我們剛剛新寫的 toString 這個函數。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.226.39.85

10/04 20:34, , 1F
好多不懂的東西~! 感謝大大
10/04 20:34, 1F
文章代碼(AID): #1GRO6jBj (java)