您int
變量的所有的點是,如果他們double
更爲有用。然後,您可以使用小數位和更大範圍的距離。
這些變量:private int xOne,yOne,xTwo,yTwo;
將更好地命名爲x1, y1, x2, y2
。
您的setCoordinates
方法目前正在忽略參數並分配硬編碼的值,用於測試,我想。無論如何,假設你解決了這個問題,並且按照我的建議更改了字段名稱,則需要區分本地變量和相同名稱的字段,通過使用前綴this.
來限定對該字段的訪問權限,您可以執行此操作你:
public void setCoordinates(double x1, double y1, double x2, double y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
此構造沒有做任何事情,因爲分配是倒退:
public Distance(int x1, int y1, int x2, int y2)
{ x1=xOne;
x2=xTwo;
y1=yOne;
y2=yTwo;
}
應該是:
xOne=x1;
等。
但是,你已經有了一個setCoordinates
方法做同樣的事情,所以是有意義的調用,而不是重複自己:
public Distance(double x1, double y1, double x2, double y2) {
setCoordinates(x1, y1, x2, y2);
}
的calcDistance
方法目前沒有工作,因爲計算後答案,它不會將其分配給distance
變量,或者對其做任何其他操作。分配應該是:
public void calcDistance() {
distance = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
專門的功能,Math.hypot
存在,它計算√(x² + y²)
。使用簡化的東西:
public void calcDistance() {
distance = Math.hypot(x2 - x1, y2 - y1);
}
接下來,考慮當你實際上調用calcDistance
方法......這將永遠是設定座標,右後?那麼,爲什麼不歸入數學到setCoordinates
,並完全去除calcDistance
方法,簡化使用類:
public void setCoordinates(double x1, double y1, double x2, double y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
this.distance = Math.hypot(x2 - x1, y2 - y1);
}
檢查你的print
方法,報表打印座標實際上並不這樣做:
out.println("x1:");
應該是:
out.println("x1:" + x1);
使用out.println(...);
是合法的,假設在文件頂部你有一個聲明import static java.lang.System.out;
,但它是非標準的。考慮將其更改爲System.out.println(...);
。
最後,重新考慮整個Distance
類。它應該計算點之間的距離,但大多數方法都致力於獲取座標並從中得出結果。您提供獲得座標轉換成它的兩種不同的方式:要麼使用無參數的構造其次是setCoordinates
,或使用4參數的構造。
你提供獲得結果出來,該print
方法的一種方式,但它的作用是有限的。這不是很一般,因爲它允許只輸出到控制檯(在GUI應用程序沒用),只在一個固定的格式。您可以添加一個getDistance
方法(或使distance
字段public
)增加其用處,但讓我們看看會是什麼樣子。
試想一下,典型用途之類的總是看起來是這樣的:
/* ... get x1,y1,x2,y2 ... */
Distance distance = new Distance();
distance.setCoordinates(x1, y1, x2, y2);
double result = distance.getDistance();
/* ... do something with the result ... */
事實證明,Distance
只是一個華而不實的功能。因此,讓我們把它變成是直接返回結果的真正的功能:(這是static
,因爲它不再需要一個類的實例被創建)
static double calcDistance(double x1, double y1, double x2, double y2) {
return Math.hypot(x2 - x1, y2 - y1);
}
這種方法是現在這麼小巧便攜它可能是放在任何班級,並且不需要專門的Distance
班。例如,您可以將它放在名爲MathUtils
的類中,以及其他有用的零件。無論如何,使用它現在更簡單:
/* ... get x1,y1,x2,y2 ... */
double distance = MathUtils.calcDistance(x1, y1, x2, y2);
/* ... do something with the result ... */
如何打印輸出?那麼,以這種特定的格式打印,並不是該功能的一般功能的組成部分。如果你只需要做一次,那麼可以在調用者中完成。如果你需要從代碼中的幾個地方以這種格式計算和打印距離,那麼這是一種方法的候選方法,但方法不同,因爲最好保持calcDistance
本身的一般性。像這樣的東西會做:
static void printDistance(double x1, double y1, double x2, double y2) {
System.out.println("x1:" + x1);
System.out.println("y1:" + y1);
System.out.println("x2:" + x2);
System.out.println("y2:" + y2);
System.out.println("distance:" + calcDistance(x1, y1, x2, y2));
}
試着讓你的代碼更專業一些。我們很樂意提供幫助,只需以更恰當的方式說出您的問題。 – 2014-10-26 17:48:21