如何将对象参数与​​另一个对象参数(内部数组)进行比较

时间:2015-09-24 13:51:28

标签: java object

我需要在"内写什么?如果"语句,以检查对象的变量(数字)是否等于我的数组中的任何对象的变量(数字)?

public class Question{

    private int number;
    private String questionString;
    private int index = 0;

    public Question(int number, String questionString){


if(number < 0){
        System.out.print("Number cannot be negative!");
    }
    if(questionString.equals(null) || questionString.trim().isEmpty()){
        System.out.print("Question cannot be empty!");
    }

        this.number = number;
        this.questionString = questionString;
    }

    public boolean equals(Object o){
            if(o instanceof Question){  
               for(int i = 0; i < index; i++){
                   if(.... ){

                   }
               }
                return true;
            }
            return false;   
        }


}

测试类(主类),ofc尚未完成我希望它能为您提供有关如何继续我的问题类的足够信息:

public class Test{
        String name;
        Question[] questions;

        public Testi(String name, int nrQuestions){

        }

        public static void main(String[]args){

        }

}

2 个答案:

答案 0 :(得分:0)

这应该做:

    public boolean equals(Object o){
    if (o == null )
    return false;

    if(o instanceof Question){
        if (((Question)o).number == this.number ){
            if (this.questionString.equals(((Question)o).questionString)){
                return true;
            }
        }

    }
    return false;
}

但请注意,如果您要实施equals(),则还应实施hashCode()。当两个物体相等时,它应该是你的“模型”。在你的情况下,我会说当两个问题的number相同时,问题也是一样的。如果没有,您还应该将questionString添加到支票

答案 1 :(得分:0)

从你上一篇评论中,我想我现在明白你的真实问题:你试图用equals()方法将一个对象与你传递给这个方法的对象数组进行比较,对吧?对equals的调用如下所示:

Question[] questions;
question.equals(questions);

从技术上讲,这可以通过Java实现,但强烈反对我会说。 equals()应该只用于一次比较一个对象(并坚持使用hashCode / equals合约)。

所以我建议你做这样的事情:

     //your application code
    public boolean equals(Object obj){
        if (obj instanceof Question){  
            return (((Question)obj).number == this.number);
        }
        return false;   
    }

    //use this to obey the equals/hashCode contract
    public int hashCode() {
        return this.number;
    }

    // your test code -------------

    public void testQuestions(Question testAgainstThisObject, Question[] testQuestions) {
        for (Question testThisQuestion : testQuestions) {
            assertTrue(testAgainstThisObject.equals(testThisQuestion));
        }
    }

另一种方式是在Question.java中使用专门的方法,如下所示:

    public boolean isThisContained(Question[] questions) {
        for (Question question : questions) {
            if (this.equals(question)) {
                return true;
            }
        }

        return false;
    }