2015-01-14 99 views
0

我需要比較char值和set char值'g''c''a''t'(小寫和大寫),因爲我只想要這些值被輸入。我似乎無法得到我的輸入驗證工作的某些情況。Java在一個while循環中比較char值和set char值

在下面的字符串中的f可以代表任何不是字符g,c,a,t的字符串長度。

字符串「fffffff」保留在循環中。 字符串「fgf」保留在循環中。

但是,我想要字符串,「fffffg」或「gfg」退出循環,他們不這樣做。

這個練習的實際目的是將用戶輸入的像g,c,a,t這樣的核苷酸類似於DNA中的核苷酸,並將它們轉換成互補的RNA串。 G是C的補充,反之亦然。 A是對U的補充(T被U替代),反之亦然。 所以如果字符串是「gcat」,那麼RNA的響應應該是「cgua」。

import java.text.DecimalFormat; 
import javax.swing.SwingUtilities; 
import javax.swing.JOptionPane; 
import java.util.Random; 

//getting my feet wet, 1/13/2015, program is to take a strand of nucleotides, G C A T, for DNA and give 
//the complementary RNA strand, C G U A. 
public class practiceSixty { 

public static void main(String[] args){ 
SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 

     String input = null; 

     boolean loopControl = true; 

     char nucleotide; 

     while(loopControl == true) 
     { 
      input = JOptionPane.showInputDialog(null, " Enter the sequence of nucleotides(G,C,A and T) for DNA, no spaces "); 
      for(int i = 0; i < input.length(); i++) 
      { 
      nucleotide = input.charAt(i); 

       if(!(nucleotide == 'G' || nucleotide == 'g' || nucleotide == 'C' || nucleotide == 'c' || nucleotide == 'A' || nucleotide == 'a' || nucleotide == 'T' || nucleotide == 't')) 
       { 
       loopControl = true; 
       } 
       else if(nucleotide == 'G' || nucleotide == 'g' || nucleotide == 'C' || nucleotide == 'c' || nucleotide == 'A' || nucleotide == 'a' || nucleotide == 'T' || nucleotide == 't') 
       { 
       loopControl = false; 
       System.out.println(nucleotide); 
       } 
      } 

     } 
      JOptionPane.showMessageDialog(null, "the data you entered is " + input); 

      StringBuilder dna = new StringBuilder(input); 

      for(int i = 0; i < input.length(); i++) 
      { 
      nucleotide = input.charAt(i); 

       if(nucleotide == 'G' || nucleotide == 'g') 
       { 
        dna.setCharAt(i, 'c'); 
       } 
       else if(nucleotide == 'C' || nucleotide == 'c') 
       { 
        dna.setCharAt(i, 'g'); 
       } 
       if(nucleotide == 'A' || nucleotide == 'a') 
       { 
        dna.setCharAt(i, 'u'); 
       } 
       else if(nucleotide == 'T' || nucleotide == 't') 
       { 
        dna.setCharAt(i, 'a'); 
       } 
      } 
      JOptionPane.showMessageDialog(null, "the DNA is , " + input + " the RNA is " + dna); 
} 
}); 
} 
} 

回答

1

你可以做你的檢查與一個正則表達式,然後只需用一個do/while循環來保持提示輸入,直到用戶輸入有效的東西。

do { 
    input = JOptionPane.showInputDialog(
     null, " Enter the sequence of nucleotides(G,C,A and T) for DNA, no spaces "); 
} while (!input.matches("[GCATgcat]+")); 

正則表達式將匹配由所示8的一個或多個字母組成的任何輸入。當你沒有得到匹配時,循環重複。

+0

謝謝大衛華萊士。我對使用正則表達式很謹慎,但看起來非常有用,而且我的書沒有真正向我介紹過它。 –