我已经写了一个程序将字符a,g,t,c从一个文本框转换为另一个值,问题是当除了a,g,t,c之外的几个值时,它会为每个无效的你显示一条错误消息我可以这样做吗,当它看到第一个无效字符时,它会停止转换method.Below are my codes.Thank character.how
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循环。
发布于 2012-11-18 16:06:10
添加一个标签到循环中,对这个标签使用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-18 16:16:14
您可以使用一个标志来通知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-18 16:41:46
您可以将default
选项更改为return
而不是break
。您还可以让它抛出一个IllegalArgumentException
(或您喜欢的任何其他异常),然后在调用方法中处理它:
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.
}
https://stackoverflow.com/questions/13438479
复制相似问题