如何让java只接受数字1-5的用户输入

  • 本文关键字:用户 数字 java java validation
  • 更新时间 :
  • 英文 :


我正在创建一个小游戏,我希望用户只能在行(r(和列(c(都是奇数的单元格中输入数字1-5。我对此非常陌生,所以我并不担心代码是否完美,只是试着理解它

if((r%2==1)&&(c%2==1)){
setBackground(Color.WHITE);
addKeyListener(new KeyAdapter(){
@Override
public void keyTyped(KeyEvent e){
int c =(e.getKeyChar());
trace("c: "+c);
if ((c!='1')||(c!='2')||(c!='3')||(c!='4')||(c!='5'))
panel.setStatus("Invalid input");
return;
}});
};

我还尝试过使用unicode

setBackground(Color.WHITE);
addKeyListener(new KeyAdapter(){
@Override
public void keyTyped(KeyEvent e){
int c =(e.getKeyCode());
trace("c: "+c);
if ((c!=49||(c!=50)||(c!=51)||(c!=52)||(c!=53))
panel.setStatus("Invalid input");
return;
}});
}; 

但两者似乎都不起作用?

我看到一个决定性错误和一个潜在错误。

if ((c!='1')||(c!='2')||(c!='3')||(c!='4')||(c!='5'))
panel.setStatus("Invalid input");
return;

相当于:

if ((c!='1')||(c!='2')||(c!='3')||(c!='4')||(c!='5')) {
panel.setStatus("Invalid input");
}
return;

不确定这是否是你想要的。你的压痕表明情况并非如此。也许这只是问题中的一个错误。对于问题中给出的代码,没有什么区别,因为return无论如何都是块的最后一条语句。但是,如果提前退出是有条件的,而其他代码被跳过,那么未来的代码需要记住一些事情。

决定性的错误是布尔逻辑。按照你写的方式,表达式永远不可能是false:

(c!='1') || (c!='2') || (c!='3') || (c!='4') || (c!='5')

如果c是"1",则它不等于"2"。如果c是"2",则它不等于"3"。因此,对于任何输入,表达式总是成立的(所谓的重言式(。你想写它的方式是两种之一:

(c!='1')&&(c!='2')&&(c!='3')&&(c!='4')&&(c!='5')
!((c=='1')||(c=='2')||(c=='3')||(c=='4')||(c=='5')

或者更简单:

if (!(c >= '1' && c <= '5'))

相关内容

  • 没有找到相关文章