在参数正确的情况下,两个构造函数中的一个起作用,而另一个则不起作用

时间:2019-06-22 14:04:42

标签: java

我是编程新手。我不明白为什么我用来检查构造函数中字符串参数字符的有效性的构造函数之一不起作用。构造函数应检查输入的字符串是否仅包含字符G,C,A,T,否则将引发IllegalArgumentException

我尝试使用一个字符数组通过对输入的字符串使用toCharArray()方法来检查字符串的有效性。构造函数适用于无效字符串,但不适用于有效字符串。但是我使用的另一个构造器却起作用。请让我知道为什么第一个没有。

//这是第一个对我不起作用的构造器

public class Fragment {
    private String nucleotideSequence;

    public Fragment(String nucleotides) throws IllegalArgumentException {

        char[] validityCheck = nucleotides.toCharArray();
        int validityCounter = 0;

        for (char c : validityCheck) {
            if(c != 'G' || c != 'C' || c != 'A' || c != 'T') {
                validityCounter++;
            }
        }

        if (validityCounter != 0) {
            throw new IllegalArgumentException("Invalid characters present");
        }

        nucleotideSequence = nucleotides;
    }
}

//这是第二个有效的构造方法

public class Fragment {
    private String nucleotideSequence;

    public Fragment(String nucleotides) throws IllegalArgumentException {

        boolean k = false;

        for(int i = 0; i < nucleotides.length(); i++){

            char lol = nucleotides.charAt(i);
            if(lol=='A'||lol=='G'||lol=='C'||lol=='T'){
                k = true;
            }
            else{
                k = false;
            }

            if(k == false){
                throw new IllegalArgumentException("Dosent work");
            }

            nucleotideSequence = nucleotides;
        }
    }
}

1 个答案:

答案 0 :(得分:4)

您在构造器中无法使用的问题是以下“ if”语句:

if(c != 'G' || c != 'C' || c != 'A' || c != 'T')

此陈述始终为真。因此,以下内容:

    for (char c : validityCheck) {
        if(c != 'G' || c != 'C' || c != 'A' || c != 'T') {
            validityCounter++;
        }
    }

等于:

    for (char c : validityCheck) {
        validityCounter++;
    }

正确的陈述是

if(c != 'G' && c != 'C' && c != 'A' && c != 'T') {