2017-04-21 2 views
0

나는 나의 자바 프로젝트에 2 개의 객체를 가지고 있고 각각의 객체에서 필드를 가져 가고 싶다. (예를 들어 우리는 2 개의 다른 방을 가지고있다. field "price") 메소드 안에 em을 넣고 변수를 반환합니다 (앞의 예에서는 두 개의 방의 차이를 말해 보겠습니다). 내 주요 질문은 당신이 메소드를 생성 한 후에 어떻게 메인 클래스에서 호출 할 것인가? 나는 (아래의 코드) 시도를했는데 그것이 옳지 않다는 것을 안다. 그렇게하는 방법에 대해 조언을 해줄 수 있다면 정말 도움이 될 것이다.자바에서 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"클래스에 있으며 생성자 룸의 setter 및 getter가 있음). "이 메서드는 TestRoom (주) 형식에 대해 정의되지 않았습니다. public double getpriceDifference (이중 2 인실 더블 double2) { \t \t \t \t 이중 차분 = 0; \t 차이 = 2 인실 - double2; \t \t 복귀 차이; \t} –

+0

@sotosbic는 상기 방법을 동일하게 할 때 맞춤법되고 당신이 때 def 때 전화 그거야? 여기에 귀하의 코드에서 "getpriceDifference (..."작성한 귀하의 질문에 그냥 "priceDifference (...") – RaceYouAnytime

+0

지침에 그것은 공공 메서드를 두 번 getpriceDifference (double1, double2)의 차이를 계산했다 2 가격 사이. 나는 가격 한계가 메서드의 이름이라고 생각하고이 메서드에 대한 getter와 같다. (자바에서 초보자이므로 자바로는 아직 편하지 않다.) –

1

적절한 자바 방법에

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); 

업데이트 : OPS의 문제에 대한 해결책 자신의 의견에 따라 : 대신에, 이런 경우

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

, 당신의 Room 클래스의 꺼내 :

나는 당신의 방법은 다음과 같습니다 받아 public static void main()가에 위치하여 같은 클래스에 넣어 또는 사용을 이동하지 않고 액세스 할 수 있습니다 :.

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

전나무 있습니다 이 업데이트의 제안이 구문 상 올바르지 만 나쁜 디자인으로 간주되므로 st 제안은 아마도 여전히 최상의 옵션 일 것입니다. OP의 코멘트에 따라 완성을 위해 다른 두 개를 추가했습니다.

+0

글쎄, 내 대학의 프로젝트이고, 지침서에서 우리는 동시에 2 가지 가격을 취하는 방법 비용 차이를 만들어야한다고 말했다. 귀하의 제안을 주셔서 감사합니다 –

+0

내 대답보다 나은, 이것이 실제로 그것을 할 수있는 방법입니다. – RaceYouAnytime

+0

답장을 보내 주셔서 감사합니다.하지만 지침에 따르면 방안에 방안이 있어야한다고 나와 있습니다 ... –