首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >走出for循环

走出for循环
EN

Stack Overflow用户
提问于 2012-11-18 16:04:00
回答 3查看 687关注 0票数 1

我已经写了一个程序将字符a,g,t,c从一个文本框转换为另一个值,问题是当除了a,g,t,c之外的几个值时,它会为每个无效的你显示一条错误消息我可以这样做吗,当它看到第一个无效字符时,它会停止转换method.Below are my codes.Thank character.how

代码语言:javascript
运行
复制
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循环.how,以防止它通过for循环。

EN

回答 3

Stack Overflow用户

发布于 2012-11-18 16:06:10

添加一个标签到循环中,对这个标签使用break。有点像goto风格,但它很管用...

代码语言:javascript
运行
复制
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);
    }

}

简单的测试方法:

代码语言:javascript
运行
复制
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;
        }
    }

}

输出:

代码语言:javascript
运行
复制
reading: A
reading: T
reading: W
some weird value! breaking!
票数 2
EN

Stack Overflow用户

发布于 2012-11-18 16:16:14

您可以使用一个标志来通知for循环退出:

代码语言:javascript
运行
复制
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);
   }
}
票数 2
EN

Stack Overflow用户

发布于 2012-11-18 16:41:46

您可以将default选项更改为return而不是break。您还可以让它抛出一个IllegalArgumentException (或您喜欢的任何其他异常),然后在调用方法中处理它:

代码语言:javascript
运行
复制
default:
    throw new IllegalArgumentException("Not a DNA Sequence");

然后在调用者中:

代码语言:javascript
运行
复制
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.
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13438479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档