Один из двух конструкторов работает, а другой - нет, когда аргумент верен - PullRequest
1 голос
/ 22 июня 2019

Я новичок в программировании.Я не понимаю, почему один из конструкторов, которые я использую для проверки правильности символов строкового аргумента в конструкторе, не работает.конструктор должен проверить, содержит ли введенная строка только символы 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 Ответ

4 голосов
/ 22 июня 2019

Ваша проблема в неработающем конструкторе заключается в следующем операторе 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') {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...