Java 在特定条件下工作

Java 在特定条件下工作,java,Java,我用java创建了一个方法来检查值是否是四个字母中的一个 public static String check(String m) { while(!"A".equals(m)&&!"T".equals(m)&&!"C".equals(m)&&!"G".equals(m)) { JOptionPane.showInputDialog("Wrong try again"); } return m; } 但即使该值不是其中

我用java创建了一个方法来检查值是否是四个字母中的一个

public static String check(String m)
{
  while(!"A".equals(m)&&!"T".equals(m)&&!"C".equals(m)&&!"G".equals(m))
  { 
     JOptionPane.showInputDialog("Wrong try again");
  }
  return m;
}
但即使该值不是其中之一,该方法也会返回错误的值
有没有办法让while的输入值等于四个字母的1/4,然后返回它们呢

public static String check(String m)
{

  while(true)
  { 
    m =  JOptionPane.showInputDialog(null,"Enter here");
     if(!"A".equals(m)&&!"T".equals(m)&&!"C".equals(m)&&!"G".equals(m))
     { 
     JOptionPane.showInputDialog("Wrong try again");
     }
     else
     {
       break;  //will terminate the loop
     }
  }
  return m;
}

您必须先了解基本知识,然后再查看其他答案……

您希望循环,直到收到满足您需求的输入,但问题是,接收输入并不是自动发生的。调用
check(someString)
后,
m
变为
someString
,并且
m
不会更改,除非您的check函数为其指定新值。因此,while循环每次都会检查相同的输入,即使用户试图发送新的输入。您必须调用函数以接收新的用户输入并将其放入
m
,或者将
while
循环替换为返回
false
null
*的
if
语句,并重复请求新输入并调用
检查
,直到得到除
false
null
以外的结果

*在编写代码时,您必须返回
null
,但是可能需要更改您的方法,以便在输入有效时返回
true
,或者在输入无效时返回
false
,然后您可以将此函数用作
if
do while
语句中的条件

例如:

public static String getInput() {
    //m is probably not the best name, but you haven't told us what it means
    //replace "Enter m here" with whatever your input prompt is
    String m = JOptionPane.showInputDialog(null, "Enter m here"); 
    while(!check(m)) {
        //m is not valid, ask again
        //the "m =" is crucial
        m = JOptionPane.showInputDialog("Wrong try again");
        //now returns to checking: if m checks true, program continues; otherwise, asks again
    }
    return m;
}
//you have a set of disallowed inputs, put it into a set rather than hardcode
private static final Set<String> disallowed = new HashSet<>(Arrays.asList(
    "A", "T", "C", "G"
));
public static boolean check(String m) {
    return !disallowed.contains(m);
}
公共静态字符串getInput(){
//m可能不是最好的名字,但你还没有告诉我们它的意思
//将“在此处输入m”替换为任何输入提示
字符串m=JOptionPane.showInputDialog(null,“在此处输入m”);
而(!检查(m)){
//m无效,请再次询问
//“m=”是至关重要的
m=JOptionPane.showInputDialog(“错误重试”);
//现在返回到检查:如果m检查为true,程序继续;否则,再次询问
}
返回m;
}
//如果您有一组不允许的输入,请将其放入一组而不是硬代码中
不允许私有静态最终集=新哈希集(Arrays.asList(
“A”、“T”、“C”、“G”
));
公共静态布尔检查(字符串m){
返回!不允许。包含(m);
}

你没有改变循环中
m
的值,那么你希望它如何从用户那里获得新的输入呢?除了Jon的评论之外,你现在的while循环可能只是一个
语句,如果
语句使用
while(true)
break
是不好的做法;相反,您应该将您的
if
条件作为
while
条件。我想知道您对这段特定代码的陈述原因@原因是a。你可以和b。它更清晰,并且遵循标准的编码模式;使用
while(true)
break
实际上就是
goto
,这在C语言中是不被鼓励的,在Java语言中是不被允许的,原因很好。虽然这个答案可能解决了他的问题,这对他的真正问题没有帮助,那就是他不理解程序流和
while
循环。@Saposhiente是的,但我犹豫了一下,告诉OP去读一本书或使用谷歌,;)很好,我有点懒,但是你做了艰苦的工作,干杯+1、添加一些代码示例,对他会有帮助