如何处理错误的输入

时间:2016-01-26 01:42:07

标签: java dna-sequence

我正在尝试编写一个代码来确定DNA序列的两个输入是否是反向恭维。程序要求用户将序列作为字符串提供。 我已经正确执行了代码,但是如果字符都是'A''T''C'或'G',我想写一个继续程序的if语句。

这是我自己提出的,但它不起作用,甚至看起来都不是很接近。我是这门语言的新手,来自ADA,我很难过任何帮助都会很棒。

if ( seqFirst.charAt(i) !=  'A' || seqFirst.charAt(i) != 'T' || 
                 seqFirst.charAt(i) != 'C' || seqFirst.charAt(i) != 'G' || 
                 seqSecond.charAt(i) !=  'A' || seqSecond.charAt(i) != 'T' || 
                 seqSecond.charAt(i) != 'C' || seqSecond.charAt(i) != 'G' )

4 个答案:

答案 0 :(得分:0)

您只需在整个条件表达式中将||更改为&&

通过解释,请考虑代码的简化版本:

  if (c != 'A' || c != 'T' ) { // IS BAD }

并考虑c'A'的情况。第一个谓词的计算结果为false。第二个谓词的计算结果为true。整个表达式为false || true ... true ..." BAD"

现在将||更改为&&,然后获得false && true ...这是false ..." NOT BAD"

  

我是该语言的新手,来自ADA ......

这不是真正的问题。问题是理解布尔代数是如何工作的;即DeMorgan's Laws

答案 1 :(得分:0)

我看到了可能的De Morgan法律问题。记住!(a或b)=!a和!b。

答案 2 :(得分:0)

据我所知,当其中一个与另一个相等时,2个DNA串是反向恭维,但是反转并且核苷酸改变了。由于我不知道您的Java版本,我在Java7中编写了一些可读的方法:

public static boolean isComplimentaryReverse(String str1, String str2) {
    //invalid input, could throw exception
    if (str1.length() != str2.length()) {
        return false;
    }
    //could be static final field
    Map<Character, Character> replaceTable = new HashMap<>();
    replaceTable.put('G', 'C');
    replaceTable.put('C', 'G');
    replaceTable.put('T', 'A');
    replaceTable.put('A', 'T');

    String reverseStr1 = new StringBuilder(str1).reverse().toString();
    for (int i = 0; i < str2.length(); i++) {
        //invalid input, could throw exception
        if (!replaceTable.containsKey(reverseStr1.charAt(i))) {
            return false;
        }
        if (str2.charAt(i) != replaceTable.get(reverseStr1.charAt(i))) {
            return false;
        }
    }
    return true;
}

答案 3 :(得分:0)

使用正则表达式简化。

private static final String VALID_DNA = "[ATCG]+";
...

if (seqFirst.matches(VALID_DNA) && seqSecond.matches(VALID_DNA)) {
    // keep going...
}