Java 在特定条件下工作
我用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; } 但即使该值不是其中
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、添加一些代码示例,对他会有帮助