Java – what is the best way to test this? Binary number with 4 positions

Consider the four input fields a, B, C and D on the web surface. Users can fill in any of these There are 16 combinations of how to fill these fields Allowed are:

A B C D
-------
1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1

Where 1 means not null and 0 means null

I'm using JSF's MVC mode I don't want the logic in the view, but in the controller What is the best way to check this in Java?

So far, I have implemented two solutions

Solution 1:

@Override
public boolean isInputInvalid(Integer a,Integer b,Integer c,Integer d) {
    if (isNotSet(a) && isNotSet(b) && isNotSet(c) && isNotSet(d) {
        return true;
    }
    return (firstParameterDoesNotExistAndSecondDoesExist(a,b)) || (firstParameterDoesNotExistAndSecondDoesExist(b,c)) || (firstParameterDoesNotExistAndSecondDoesExist(c,d));
}

private boolean firstParameterDoesNotExistAndSecondDoesExist(Integer firstParameter,Integer secondParameter) {
    return isNotSet(firstParameter) && !isNotSet(secondParameter);
}

private boolean isNotSet(Integer parameter) {
    return parameter == null;
}

Solution 2:

public boolean isInputValid(Integer a,Integer d) {
    if (exists(a) && !exists(b) && !exists(c) && !exists(d) || //
            exists(a) && exists(b) && !exists(c) && !exists(d) || //
            exists(a) && exists(b) && exists(c) && !exists(d) || //
            exists(a) && exists(b) && exists(c) && exists(d)) {
        return true;
    }
    return false;
}

private boolean exists(Integer level) {
    return level != null;
}

be careful:

The first method checks whether the input is invalid, and the second method checks whether the input is valid (pay attention to the name of the method)

I wrote 16 unit test cases, and both versions run green

Do you have any tips / Tricks / tips on how to make your code more readable?

Solution

If you only care about readability:

public static List<String> validOptions = Arrays.asList("1000","1100","1110","1111");

public boolean isValid(Integer a,Integer d)
{
    StringBuilder sb = new StringBuilder();
    sb.append(a==null ? 0 : 1); 
    sb.append(b==null ? 0 : 1),sb.append(c==null ? 0 : 1); 
    sb.append(d==null ? 0 : 1);
    return validOptions.contains(sb.toString());
}

Note that this is not the fastest or cleanest solution (wasting some CPU and memory)

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>