2017-04-21 7 views
0

私のJavaプロジェクトには2つのオブジェクトがあり、各オブジェクトからフィールドを取得したいとします(たとえば、2つのホテルルームがあります。フィールド "価格")とメソッドに入れて変数を返します(前の例では2つの部屋の違いを言いましょう)。私の主な質問は、メソッドを作成した後で、どのようにメインクラスで呼び出すのですか? 私は試しましたが(以下のコード)、正しくはないことを知っています。あなたが私にそれをする方法やアドバイスをすることができれば、本当に役立つでしょう。Javaの2つのオブジェクトフィールドの違いを取得する方法

difference = priceDifference(roomA.price, roomB.price); 

完全なコード メインクラス

package project1; 
    import java.util.Scanner; 

public class TestRoom { 

public static void main(String[] args) { 
    String roomNumber, category, view; 
    int numberOfBeds; 
    double price; 
    double difference; 
    Room roomA = new Room("C101",2,"Standard","Sea",95.89); 



    Scanner sc = new Scanner(System.in); 
    System.out.println("Give room number \n"); 
    roomNumber=sc.next(); 
    System.out.println("Give number of beds \n"); 
    numberOfBeds=sc.nextInt(); 
    System.out.println("Give category \n"); 
    category=sc.next(); 
    System.out.println("Give view \n"); 
    view=sc.next(); 
    System.out.println("Give price \n"); 
    price=sc.nextDouble(); 

    Room roomB = new Room(roomNumber, numberOfBeds, category, view, price); 
    System.out.println(roomA.toString()); 
    System.out.println(roomB.toString()); 

    difference = priceDifference(roomA.getprice(), roomB.getprice()); 


} 

} 

クラスルーム

package project1; 

public class Room { 

public String roomNumber; 
public int numberOfBeds; 
private String category; 
private String view; 
private double price; 




    public Room(String roomNumber, int numberOfBeds, String category, String view, double price){ 
    this.roomNumber = roomNumber; 
    this.numberOfBeds = numberOfBeds; 
    this.category = category; 
    this.view = view; 
    this.price = price; 
} 








public void setroomNumber(String roomnumber){ 
    this.roomNumber = roomnumber; 
} 
public String getroomNumber(){ 
    return this.roomNumber; 
} 

public void setnumberOfBeds(int numberofbeds){ 
    this.numberOfBeds = numberofbeds; 
} 
public int getnumberOfBeds(){ 
    return this.numberOfBeds; 
} 

public void setcategory(String category){ 
    this.category = category; 
} 
public String getcategory(){ 
    return this.category; 
} 

public void setview(String view){ 
    this.view = view; 
} 
public String getview(){ 
    return this.view; 
} 

public void setprice(double price){ 
    this.price = price; 
} 
public double getprice(){ 
    return this.price; 
} 


public double priceDifference(double double1 ,double double2){ 

    double difference = 0; 
    difference = double1 - double2; 
    return difference; 
} 

@Override 
public String toString() { 
    return "Room number:" + this.roomNumber + ",\n " 
      + "Number of beds:" + this.numberOfBeds + ",\n " + "Category:" 
      + this.category + ",\n " + "View:" + this.view + ",\n " + "Price:" + this.price; 
} 

}

答えて

0

それは、カプセル化あなたのフィールドに良い習慣です。 "Room"クラスで非公開のままにし、値に直接アクセスするのではなく、getterメソッドとsetterメソッドを使用します。

difference = priceDifference(roomA.getPrice(), roomB.getPrice); 

これ以上の文脈なしに私が与えることができるすべてのアドバイスです。このコードには何も問題はありません。エラーをデバッグしようとすると、より多くの情報が必要になります。

コードが立っているので、メソッド呼び出しを更新してルームクラスのインスタンスを参照する必要があります。あなたのRoomクラスに簡単な機能を追加することです

difference = roomB.priceDifference(roomA.getprice(), roomB.getprice()); 
+0

これはpriceDifferenceメソッドです(これはコンストラクタルームのセッターとゲッターを持つクラス "Room"にありますが) "このメソッドはTestRoom(main)タイプでは未定義です public double getpriceDifference(ダブルダブルサイズ、ダブルダブルサイズ){ \t \t \t \t二重差= 0; \t差=ダブルサイズ - ダブルサイズ; \t \tリターン差; \t}とき –

+0

@sotosbicあなたは方法と同じ方法をスペルしていますあなたがdefをしたときと同じようにそれ?ここであなたのコードでは、 "getpriceDifference(..."と書かれたあなたの質問では、ちょうど "priceDifference(..." – RaceYouAnytime

+0

)と書いてありますが、それはPUBLICメソッドを2倍のgetpriceDifference(double1、double2) 2つの価格の間にある。私はpriceifferenceがメソッドの名前だと思って、このメソッドのgetterのようなものです(私はJavaで初心者ですので、私はまだJavaで快適ではありません) –

1

適切なJavaの道に

difference = priceDifference(roomA.getprice(), roomB.getprice()); 

を変更することができ

public double priceDifference(Room roomB) { 
    return this.price - roomB.getPrice(); //or roomB.price if you do not use getters 
} 

あなたはその後、使用してメインアプリケーションでそれを呼び出すことができます:

double difference = roomA.priceDifference(roomB); 

アップデート:彼のコメントに応じてのOPの問題のためのソリューション:

私はそれはあなたの方法は次のようになります取る:

public double priceDifference(double roomAprice, double roomB.price) { // code here } 

その場合は、あなたのRoomクラスのそれを取り出し、代わりにpublic static void main()が置かれているあなたと同じクラスに入れる代わりに、あなたが使用してそれを移動することなく、これにアクセスできます。

difference = roomA.priceDifference(roomA.price, roomB.price); 

モミことに注意してくださいこのアップデートの提案は構文的には正しいと思われますが、デザインが悪いと考えられるため、おそらく最高の選択肢となります。私はちょうどOPのコメントごとに完成のために他の2つを追加しました。

+0

これは私の大学のプロジェクトです。指示書には、2つの価格を同時に取る方法の価格差異を作る必要があると言われました。しかし、あなたの提案をありがとう –

+0

私の答えよりも、これは実際にそれを行う方法です。 – RaceYouAnytime

+0

ご返信ありがとうございますが、手順では部屋のクラスにある必要があることを指示しています。 –

関連する問題