所以我需要创建一个方法isValidDNA,其工作原理如下:
public boolean isValidDNA()
如果DNA有效,则返回true,即仅包含字母, A,T,C,G(大写)和至少一个这些字符。
我能想到的只是这个,显然不起作用:
public boolean isValidDNA(){
for (int i=0;i<dna.length();i++){
if (dna.charAt(i)=='A' || dna.charAt(i)=='T' || dna.charAt(i)=='C' || dna.charAt(i)=='G' ){
return true;
}
return false;
}
}
答案 0 :(得分:2)
您可以使用此正则表达式: - [ATCG]+
在代码中,这可能如下所示:
public boolean isValidDNA(){
return dna.matches("^[ATCG]+$")
}
答案 1 :(得分:1)
您立即生成一个return语句,它将在第一次迭代期间退出并仅检查第一个字符。
您需要将此信息存储在布尔值中,并在检查完整个字符串后返回它:
public boolean isValidDNA(String dna){
Boolean result = true;
// Add an extra check for the "at least one character" thing.
for (int i=0; i<dna.length(); i++){
if (dna.charAt(i)!='A' && dna.charAt(i)!='T' && dna.charAt(i)!='C' && dna.charAt(i)!='G' ){
result = false;
}
}
return result;
}
但是,最好使用regular expressions来解决这些问题。
答案 2 :(得分:1)
以这种方式尝试:
public boolean isValidDNA(){
boolean res = true;
for (int i=0;i<dna.length();i++){
if ((dna.charAt(i) != 'A') && (dna.charAt(i)!='T') && (dna.charAt(i)!='C') && (dna.charAt(i)!='G') ){
res = false;
break;
}
}
return res;
}
如果您的起始点是DNA有效,那么测试它是否真的如此容易得多。您只需要测试dna
的每个字符,并且可以在第一个不满足if语句的条目处停止。
答案 3 :(得分:1)
用你的方式,你几乎得到它。
现在,如果找到一个没问题,则返回true
,如果一切都错误,则只返回false
。您可以否定if
条件,并在找到不确定的条件后立即返回false
,如果一切正常,则只返回true
。
我会把编码部分留给你。
正如其他人所指出的,正则表达式将是一个更清洁的解决方案。
答案 4 :(得分:1)
您可以尝试此实施。
首先声明一个常量:
private static final String bases = "ATCG";
然后在这样的方法中使用它:
public boolean isValidDNA() {
boolean isValid = true;
for (char c : dna.toCharArray()) {
if (bases.indexOf(c) < 0) {
isValid = false;
break;
}
}
return isValid;
}
答案 5 :(得分:1)
Scanner sc = new Scanner(System.in);
System.out.print("Enter a DNA sequence: ");
seq=sc.nextLine();
if(seq.matches(".*[^ATCG].*")){
System.out.println("Not a valid sequence.");
System.exit(0);
}
这个正则表达式有效,只有包含A,C,T或G但没有包含其他字符,空格等的序列才会继续