Re: [問題] 關於三角形座標和面積
※ 引述《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