我正在将我的旧Hangman java游戏移植到android上,以便在1月份进行编程决赛。我已经完成了大部分工作,但我发现我没有对无效字符进行任何检查。除了小写字母外,无效字符基本上都是一切。我一直在考虑手动将所有有效字符输入数组并检查每个输入。有没有更简单的方法呢?
以下是从适当的EditText中捕获输入的代码:
final EditText guessedLetter = (EditText) findViewById(R.id.LetterInput);
final Button enterGuess = (Button) findViewById(R.id.GuessButton);
enterGuess.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String guess = guessedLetter.getText().toString(); //Save text to a string
guessedLetter.setText(""); //Clear EditText after input has been saved to a String
editor.putString(GAME_LOGIC_GUESS, guess);
editor.commit();
Log.i(GAME_DEBUG, "Guess: " + guess + " parsed to guess()");
guess();
checkWin();
updateDisplay();
}
}});
再次感谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
您可能希望首先使用TextView的setKeyListener方法设置KeyListener。然后,您将覆盖您设置的KeyListener的onKeyDown方法并监听输入。如果键入的内容不是字符(即:A - Z),那么您将丢弃输入并取消事件。如果输入的内容是字符,则应在将字符添加到文本框之前将其转换为小写。
修改
注意到你没有在按键上执行此操作,而是用户必须点击“确定”。这会让您的生活更轻松。
当用户按下“确定”时,检查文本是否是有效字符(即:只有一个字符,介于A - Z之间)。如果不是,请对用户大喊大叫。如果是,请检查它是否为小写或自己将其转换为小写。
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Character.html#toLowerCase(char)
答案 2 :(得分:0)
我发现对于这个特定问题,最简单的解决方案是只填充有效字符的数组。因此,不是将无效的字符和符号列入黑名单,而是将相对较少的有效字符列入白名单。
如果有人在将来需要它,那么这是数组:
final String[] allowedChars = {"a", "b", "c", "d", "e",
"f", "g", "h", "i", "j",
"k", "l", "m", "n", "o",
"p", "q", "r", "s", "t",
"u", "v", "w", "x", "y",
"z"};
使用循环进行比较:
for(int n = 0; n < allowedChars.length; n++){
if(allowedChars[n].equalsIgnoreCase(guess)){
//Game logic here
}}