2014-04-12 82 views
0

我應該寫一個Cruiser類實現Locatable接口。巡洋艦將有x,y和速度屬性。 x,y和速度是整數。您必須爲Cruiser級提供3個構造函數。 Class Cruiser必須實現Locatable接口。Ap計算機科學Java接口和比較方法困境

一個構造函數必須是默認值。一個構造函數必須是僅包含x和y的構造函數。一個構造函數必須是x,y和速度構造函數。你必須提供一個equals方法。 equals()方法應該比較兩個巡洋艦對象的屬性。你必須提供一個toString()方法。 toString()應該返回巡洋艦的x,y和速度。

當我編譯這個它說「級巡洋艦是公共的,應在Cruiser.java聲明」

當我這樣做我的IDE說「;」正如預期的公共布爾等於後。但這並沒有意義,爲什麼你需要在方法中使用分號。

這是我迄今爲止

public interface Locatable 
{ 
public int getxPos(); 
public int getyPos(); 
} 

public class Cruiser implements Locatable 
{ 
private int xPos, yPos, speed; 
public Cruiser() 
{ 
xPos=yPos=speed=0; 
} 

public Cruiser(int x,int y) 
{ 
xPos=x; 
yPos=y; 
speed=0; 
} 

public Cruiser(int x, int y, int spd) 
{ 
xPos=x; 
yPos=y; 
speed=spd; 
} 

public int getxPos() 
{ 
return xPos; 
} 

public int getyPos() 
{ 
return yPos; 
} 

public int getSpeed() 
{ 
return speed; 
} 

public void compare(Cruiser A, Cruiser B) 
{ 
@Override 
public boolean equals(Object obj) 
{ 
if (obj instanceof Cruiser) { 
    Cruiser cruiserToCompareTo = (Cruiser)obj; 

    if(xPos == cruiserToCompareTo.getXpos() && 
      yPos == cruiserToCompareTo.getYpos() && 
      speed == cruiserToCompareTo.getSpeed()) 
     return true;    
} 
return false; 
} 
public String toString() 
{ 
String properties = "X position:"+ xPos+ ", Y position:"+yPos+ ",Speed:"+speed; 
return properties; 
} 
} 
} 
+1

你能花些時間來正確對齊你的代碼嗎?這使我們更容易閱讀。在像Eclipse或Netbeans這樣的IDE中,您只需點擊幾下即可完成此操作。 –

回答

1

這裏是什麼意思,等於要比較的字段/屬性。

public boolean equals(Object obj) { 
    if (obj instanceof Point) { 
     Point pt = (Point)obj; 
     return (x == pt.x) && (y == pt.y); 
    } 
    return super.equals(obj); 
} 

這個例子是從java.awt.Point
它是Java的內置類中的一個拍攝。
所以Point有兩個屬性xy,和
在它的等於它的方法比較它們。

參見:

java.awt.Point.equals

+0

我如何將您的建議納入我的代碼?你也知道如何實現一個接口? – user3527500

+0

1)簡單地或幾乎字面地合併它(只是想想你的案例的類比)。 2)是的,我知道。 –

+0

這是實現接口公共接口的正確方法Locatable public int getxPos(); public int getyPos(); } 公共級Cruiser實現Locatable { – user3527500

1

你有一個巡洋艦與性能的X,Y,速度和你有巡洋艦B帶X,Y,速度。如果A.x == B.x,A.y == B.y,A.speed == B.speed都是真的,則Equals將返回true。當所有參數相等時,巡洋艦A和巡洋艦B相等。

編輯:下面的代碼應進入巡洋艦級

public int getSpeed() { 
    return speed; 
} 

@Override 
public boolean equals(Object obj) { 
    if (obj instanceof Cruiser) { 
     Cruiser cruiserToCompareTo = (Cruiser)obj; 

     if(xPos == cruiserToCompareTo.getXpos() && 
       yPos == cruiserToCompareTo.getYpos() && 
       speed == cruiserToCompareTo.getSpeed()) 
      return true;    
    } 
    return false; 
} 

並請:格式你的代碼更好,而且在巡洋艦類一樣名字的方法是在界面。

編輯2:關於你的第二個問題: 你需要分開文件Cruiser.java和Locatable.java。代碼在這裏運行得很好

+0

我會如何寫?我必須更改/刪除我的比較方法嗎? – user3527500

+0

我會在每個文件中寫什麼?或者我只是有兩個相同的文件,只是名稱不同? – user3527500

+0

我做了你所說的,但Cruiser.java文件不會運行,因爲它說我需要在公共Cruiser()中使用分號。然而,公共Cruiser()是一個默認的構造函數,所以爲什麼它需要一個分號? – user3527500