1

文字a、g、t、cをテキストボックスから別の値に変換するプログラムを作成しましたが、問題は、a、g、t、c以外の値がいくつかある場合、無効な文字ごとにエラーメッセージが表示されることです.どうすればよいですか最初の無効な文字で変換メソッドを停止するようにします。以下は私のコードです。ありがとう

private void dna2rna() {
   String DNA = dna_ta.getText();
   char[]readdna;
   readdna=DNA.toCharArray();
   for (int x=0;x<readdna.length;x++){
      switch(DNA.charAt(x))
      {
         case 'A': readdna[x] = 'U';break;
         case 'T': readdna[x] = 'A';break;
         case 'C': readdna[x] = 'G';break;
         case 'G': readdna[x] = 'C';break;
         case 'a': readdna[x] = 'u';break;
         case 't': readdna[x] = 'a';break;
         case 'c': readdna[x] = 'g';break;
         case 'g':readdna[x] = 'c';break;
         default:
            JOptionPane.showMessageDialog(frame,
               "Not a DNA Sequence.Please Retry",
               "Sequence error",
               JOptionPane.ERROR_MESSAGE);
            dna_ta.setText("");
            rna_ta.setText(""); 
            break;
      }
      String rna= new String(readdna);
      rna_ta.setText(rna);
   }
}

問題は、デフォルトのケースを見つけて、for ループを続行する場合です。for ループを通過しないようにする方法です。

4

3 に答える 3

2

フラグを使用して、forループを終了するように通知できます。

private void dna2rna() {
   String DNA = dna_ta.getText();
   char[]readdna;
   readdna=DNA.toCharArray();
   boolean error = false;
   for (int x=0;x<readdna.length && !error;x++){

      switch(DNA.charAt(x))
      {
        case 'A': readdna[x] = 'U';break;
        case 'T': readdna[x] = 'A';break;
        case 'C': readdna[x] = 'G';break;
        case 'G': readdna[x] = 'C';break;
        case 'a': readdna[x] = 'u';break;
        case 't': readdna[x] = 'a';break;
        case 'c': readdna[x] = 'g';break;
        case 'g':readdna[x] = 'c';break;
        default:
            JOptionPane.showMessageDialog(frame,"Not a DNA Sequence.Please   Retry","Sequence error",JOptionPane.ERROR_MESSAGE);
            dna_ta.setText("");
            rna_ta.setText("");
            error = true;
            break; // or possibly: continue;
      }
      String rna= new String(readdna);
      rna_ta.setText(rna);
   }
}
于 2012-11-18T08:16:14.137 に答える
2

ループにラベルを追加し、このラベルで break を使用します。gotoスタイルのようなものですが、うまくいきます...

private void dna2rna() {
    String DNA = dna_ta.getText();
    char[]readdna;
    readdna=DNA.toCharArray();
    forLoop: // <----------- label
    for (int x=0;x<readdna.length;x++){

         switch(DNA.charAt(x))
         {
             case 'A': readdna[x] = 'U';break;
             case 'T': readdna[x] = 'A';break;
             case 'C': readdna[x] = 'G';break;
             case 'G': readdna[x] = 'C';break;
             case 'a': readdna[x] = 'u';break;
             case 't': readdna[x] = 'a';break;
             case 'c': readdna[x] = 'g';break;
             case 'g':readdna[x] = 'c';break;
             default:
                 JOptionPane.showMessageDialog(frame,"Not a DNA Sequence.Please   Retry","Sequence error",JOptionPane.ERROR_MESSAGE);
                dna_ta.setText("");
                 rna_ta.setText(""); break forLoop; // <----------- break to label
         }
         String rna= new String(readdna);
         rna_ta.setText(rna);
    }

}

簡単なテスト方法:

private static void dna2rna() {
    char[] readdna = { 'A', 'T', 'W', 'C', 'T', };
    forLoop: for (int x = 0; x < readdna.length; x++) {

        System.out.println("reading: " + readdna[x]);
        switch (readdna[x]) {
             case 'A': readdna[x] = 'U';break;
             case 'T': readdna[x] = 'A';break;
             case 'C': readdna[x] = 'G';break;
        default:
            System.out.println("some weird value!");
            break forLoop;
        }
    }

}

出力:

reading: A
reading: T
reading: W
some weird value! breaking!
于 2012-11-18T08:06:10.387 に答える
2

defaultオプションをreturnの代わりに に変更できますbreakIllegalArgumentExceptionまた、 (または好みの他の例外)をスローしてから、呼び出し元のメソッドで処理することもできます。

default:
    throw new IllegalArgumentException("Not a DNA Sequence");

次に、呼び出し元で:

try {
    dna2rna();
} catch (IllegalArgumentException e) {
    JOptionPane.showMessageDialog(frame,"Not a DNA Sequence.Please   Retry","Sequence error",JOptionPane.ERROR_MESSAGE);
    dna_ta.setText("");
    rna_ta.setText("");
    // Whatever else you were doing when error==true.
}
于 2012-11-18T08:41:46.007 に答える