有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用测试类查看两个整数值是否适合参数

如果将这两个值设置为介于0和29之间的值,则参数中提供的数字是这两个数字的总和,并且参数编号和实例编号相同

以下是我到目前为止编写的代码:

public class TwoNumbers {
      private int firstnum = 0;
      private int secondnum = 0;

//Constructor that initialize the first and second number
//to a value of 0

    public TwoNumbers()
    {
            firstnum = 0;
            secondnum = 0;
    }

    public int getFirstNum(){
            return firstnum;
    }
    public int getSecondNum(){
            return secondnum;
    }


    public boolean setFirstNum (int firstnum){
            if (firstnum >= 0 && firstnum <=29){
                    return true;
            }
            else {
                    return false;
            }
    }
    public boolean setSecondNum (int secondnum)
    {

            if (secondnum >= 0 && secondnum <=29){
                    return true;
            }
            else {
                    return false;
            }
    }
    public boolean checkSum (int sum){
            if (sum == firstnum + secondnum){
                    return true;
            }
            else {
                    return false;
            }

    }
    public boolean equals (int numbers1) {
            if (firstnum == secondnum){
                    return true;
            }
            else{
                    return false;
            }
            }
    }

共 (4) 个答案

  1. # 1 楼答案

    正如@GlenPierce所评论的,但有一些变化

    public boolean setFirstNum (int firstnum){
            if (firstnum >= 0 && firstnum <=29){
                    return true;
            }
            else {
                    return false;
            }
    }
    public boolean setSecondNum (int secondnum)
    {
    
            if (secondnum >= 0 && secondnum <=29){
                    return true;
            }
            else {
                    return false;
            }
    }
    

    应该是

    public boolean setFirstNum (int firstnum)
    {
    
            if (firstnum >= 0 && firstnum <=29){
            this.firstnum = firstnum; //this is to set the value for TwoNumbers class in your object
                    return true;
            }
            else {
                    return false;
            }
    }
    public boolean setSecondNum (int secondnum)
    {
    
            if (secondnum >= 0 && secondnum <=29){
            this.secondnum = secondnum; //this is to set the value for TwoNumbers class in your object
                    return true;
            }
            else {
                    return false;
            }
    }
    

    现在可以了

    即使你从两个数字课上得到了正确或错误。实例的值始终为零,而不在setFirstNum和setSecondNum中设置它们

    使用this关键字进行设置。这只是解决方案之一,还有其他方法,比如@GlenPierce所做的

    第14和第15次

    // testing equals()
    public static boolean test14() {
        TwoNumbers numbers1 = new TwoNumbers();
        numbers1.setFirstNum(1);
        numbers1.setSecondNum(4);
    
        TwoNumbers numbers2 = new TwoNumbers();
        numbers2.setFirstNum(1);
        numbers2.setSecondNum(4);
    
        return numbers1.equals(numbers2);
    }
    
    public static boolean test15() {
        TwoNumbers numbers1 = new TwoNumbers();
        numbers1.setFirstNum(1);
        numbers1.setSecondNum(4);
    
        TwoNumbers numbers2 = new TwoNumbers();
        numbers2.setFirstNum(4);
        numbers2.setSecondNum(1);
    
        return numbers1.equals(numbers2);
    }
    

    这将失败,因为你的逻辑是错误的。在中。在传递整个对象时,两个数字的equal方法接受int

    1415相等的方法改成这个,一切都会好起来的

    // testing equals()
    public static boolean test14() {
        TwoNumbers numbers1 = new TwoNumbers();
        numbers1.setFirstNum(1);
        numbers1.setSecondNum(4);
    
        TwoNumbers numbers2 = new TwoNumbers();
        numbers2.setFirstNum(1);
        numbers2.setSecondNum(4);
    
        return numbers1.equals(numbers2.secondnum);
    }
    
    public static boolean test15() {
        TwoNumbers numbers1 = new TwoNumbers();
        numbers1.setFirstNum(1);
        numbers1.setSecondNum(4);
    
        TwoNumbers numbers2 = new TwoNumbers();
        numbers2.setFirstNum(4);
        numbers2.setSecondNum(1);
    
        return numbers1.equals(numbers2.secondnum);
    }
    
    public boolean equals (int numberYouPassed) {
    
            //firstnum is the value from your numbers1
            //numberYouPassed is the value from numbers2.secondnum that you passed
    
            if (firstnum == numberYouPassed){  
                    return true;
            }
            else{
                    return false;
            }
            }
    }
    
  2. # 2 楼答案

    给你一些建议:

    • 您应该使用JUnit,而不是构建自己的测试机制。与返回布尔值和打印错误消息不同,您可以使用非常清晰的测试语句,如assertEquals("default num1 is zero", 0, new TwoNumbers().getFirstNum())
    • 保持getter和setter干净:getter应该只返回值,setter应该只设置值
    • 如果存在错误条件,例如参数超出预期范围,则抛出和异常,而不是返回布尔值
    • 让单元测试确认在正确的条件下抛出了正确的异常(使用JUnit的expected注释键)

    如果你从这些变化开始,我怀疑你的问题会很快变得非常明显,你会从一开始就学到更好的实践

  3. # 3 楼答案

    你的设定者没有设定新的值

    public boolean setFirstNum (int newValue){
                firstnum = newValue;
                if (firstnum >= 0 && firstnum <=29){
    
                    return true;
            }
            else {
                    return false;
            }
    }
    public boolean setSecondNum (int newValue)
    {
            secondnum = newValue;
            if (secondnum >= 0 && secondnum <=29){
                    return true;
            }
            else {
                    return false;
            }
    


    测试14和15没有检查数字的值
    return numbers1.equals(numbers2);应该改为
    return numbers1.firstNumber == numbers2.firstNumber && numbers1.secondNumber == numbers2.secondNumber;

  4. # 4 楼答案

    我认为你应该检查你设定的值

    public static boolean test15() {
            TwoNumbers numbers1 = new TwoNumbers();
            numbers1.setFirstNum(1);
            numbers1.setSecondNum(4);
    
            TwoNumbers numbers2 = new TwoNumbers();
            numbers2.setFirstNum(4);
            numbers2.setSecondNum(1);
    
            return numbers1.equals(numbers2);
    }
    

    在15号案例中,您正在检查1是否等于4。因此,它返回false,这个测试用例没有任何问题

    更改为:

    numbers2.setFirstNum(1);
    numbers2.setSecondNum(4);
    

    在2号案例中,您没有设置secondNum,但您正在尝试检查它,这就是它返回false的原因

    public static boolean test2() {
            TwoNumbers numbers = new TwoNumbers();
            boolean success = numbers.setFirstNum(1);
            return success && (numbers.getFirstNum() == 1) && (numbers.getSecondNum() == 0);
    }
    

    添加以下行:

    boolean success = numbers.setSecondNum(0);
    

    在第6个例子中,您没有设置firstNum,但是您正在尝试检查它,这就是为什么它也返回false

    public static boolean test6() {
            TwoNumbers numbers = new TwoNumbers();
            boolean success = numbers.setSecondNum(1);
            return success && (numbers.getFirstNum() == 0) && (numbers.getSecondNum() == 1);
    }
    

    添加以下行:

    boolean success = numbers.setFirstNum(0);
    

    当我查看14号案件时,我意识到了你的错误。。setter方法不会设置值。它们只是返回假或真。请更新如下:

    public boolean setFirstNum (int firstnum) {
        if (firstnum >= 0 && firstnum <=29) {
                this.firstnum = firstnum;
                return true;
        } else {
                return false;
        }
    }
    
    public boolean setSecondNum (int secondnum) {
        if (secondnum >= 0 && secondnum <=29) {
                this.secondnum = secondnum;
                return true;
        } else {
                return false;
        }
    }