Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中获得两个对象字段之间的差异_Java_Variables_Object_Methods_Constructor - Fatal编程技术网

如何在java中获得两个对象字段之间的差异

如何在java中获得两个对象字段之间的差异,java,variables,object,methods,constructor,Java,Variables,Object,Methods,Constructor,我的java项目中有两个对象,我想从每个对象中提取一个字段,比如说,我们有两个酒店房间,在其他字段中,它们也有一个字段价格,将它们放入一个方法中,并返回一个变量。在上一个示例中,让我们假设这两个房间的差异。我的主要问题是,在创建方法之后,如何在主类中调用它? 我在下面做了一个尝试代码,但我知道这是不对的。所以,如果你能给我一个关于如何做的建议或方法,这将是非常有帮助的 difference = priceDifference(roomA.price, roomB.price); 完整代码 主类

我的java项目中有两个对象,我想从每个对象中提取一个字段,比如说,我们有两个酒店房间,在其他字段中,它们也有一个字段价格,将它们放入一个方法中,并返回一个变量。在上一个示例中,让我们假设这两个房间的差异。我的主要问题是,在创建方法之后,如何在主类中调用它? 我在下面做了一个尝试代码,但我知道这是不对的。所以,如果你能给我一个关于如何做的建议或方法,这将是非常有帮助的

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;
}
}封装字段是一种很好的做法。在Room类中将它们保留为私有,并使用getter和setter方法,而不是直接访问值

difference = priceDifference(roomA.getPrice(), roomB.getPrice);
这就是我能给出的所有建议,没有更多的上下文。这个代码没有问题。如果您试图调试错误,我们需要更多信息

在代码运行时,应该更新方法调用以引用room类的实例。你可以改变

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


正确的Java方法是向Room类添加一个简单函数

然后,您可以使用以下命令在主应用程序中调用它:

double difference = roomA.priceDifference(roomB);
更新:根据他的评论,OPs问题的解决方案:

我认为您的方法如下所示:

public double priceDifference(double roomAprice, double roomB.price) { // code here }
如果是这样的话,把它从你的Room类中拿出来,放在你的公共静态void main所在的类中。或者,您可以通过以下方式访问它,而无需移动它:

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

请注意,第一个建议可能仍然是最好的选择,因为此更新中的建议在语法上是正确的,但设计不好。根据OP的评论,为了完成起见,我刚刚添加了另外两个。

这是priceDifference方法,它位于具有构造函数室的setter和getter的教室中,但我得到一个错误,该方法对于类型TestRoommain public double getpriceDifferencedouble 1,double double 2是未定义的{double difference=0;difference=double1-double2;返回difference;}@sotosbic当你调用这个方法时,你的拼写是否与你定义它时的拼写相同?在你的代码中,你写了getpriceDifference…在你的问题中,你写的只是priceDifference…在说明中,它说使用一个公共方法double getpriceDifferencedouble1,double2来计算两个价格之间的差异。我认为虽然pricedifference是这个方法的名称,但是get就像是这个方法的getter,我是java初学者,所以我对java还不太熟悉,当你调用一个方法时,你可以用完整的方法名来调用它。所以你可以调用这个方法getPriceDifference…和CodeDifference=getPriceDifference…或者你可以使用CodeDifference=priceDifference…调用方法priceDifference…这对你的错误有帮助吗?不,我仍然得到错误,方法priceDifferencedouble,double对于类型TestRoom是未定义的。这是我大学的一个项目,在说明中说,我们需要制作一个方法priceDifference,在sam上取2个价格e时间。谢谢你的建议,虽然比我的答案好,但这是实际操作的方式。谢谢你的回答,但在说明中说该方法需要在Room类中…@sotosbic那么我的建议3将完全满足你的需要。显示一些努力。你对问题的编辑几乎让我删除了我的评论…但是你仍然想去掉roomB.price中的点。我只是一个坚持者,因为我想象你的代码被复制粘贴,然后出现更多错误。。。
public double priceDifference(double roomAprice, double roomB.price) { // code here }
difference = roomA.priceDifference(roomA.price, roomB.price);