作者stimim (qqaa)
看板java
标题Re: [问题] 关於三角形座标和面积
时间Thu Oct 4 20:31:38 2012
※ 引述《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
1F:推 TWTRubiks:好多不懂的东西~! 感谢大大 10/04 20:34