2

我是一名新手 Android 开发人员。我正在尝试使用 Edittext 框从用户那里获取文本输入,然后将该文本转换为字符串,然后转换为大小为 4 的 char 数组。我已经存储了一个大小为 4 的数组,它包含值。我想比较两个数组并根据结果执行任务。

我不知道为什么我得到 ArrayIndexOutOfBoundsExecption

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newgame);

    Button submit = (Button) findViewById(R.id.guess);



    EditText guess = (EditText) findViewById(R.id.editText1);


    boolean c=false;

    char[] guessword;
    char[] appword = {'T', 'R', 'U', 'E'};
    guessword = guess.getText().toString().toCharArray();


    for(int i=0;i<appword.length;i++)
    {
        if(guessword[i]==appword[i])
        {
            c=true;
        }
        else
        {
            c=false;
        }
    }

    final boolean correct=c;        


    submit.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

            if(correct){
                startActivity(new Intent(Newgame.this, Win.class));
            }
            else{
                startActivity(new Intent(Newgame.this, Loose.class));
            }

        }
    });



}

}

4

4 回答 4

7

问题是它guessword可能少于四个字符,并且您的代码不会检查该条件。

如下更改您的代码以解决这种情况:

for(int i=0;i<appword.length;i++)
{
    if((i < guessword.length) && (guessword[i]==appword[i]))
    {
        c=true;
    }
    else
    {
        c=false;
        break; // <<<=== Add this to end the loop
    }
}

另请注意,您编写的代码不会“锁定”false当字符彼此不相等时:例如,{'A','B','Z'}并且{'X', 'Y', 'Z'}将在您的旧算法下比较相等。看到 . 后立即添加break以退出循环false

于 2012-08-19T20:38:34.493 回答
1

这是因为您要使用从 0 到appword.

以用户输入:“NO”的情况为例。因为您正在迭代appword哪个长度大于您的实际文本,所以当您执行 a 时,guessword[i]它会崩溃抛出您的IndexOutOfBoundsException.

我不确定你为什么使用char[]. 正如我所看到的,对于您的示例,String可以解决问题。

String appword = "TRUE";
String guessword = guess.getText().toString();

然后,显示 2 是否相等的方法是:

if (appword.equals(guessword)) 

如果您还想匹配大小写,请equalsIgnoreCase改用。

于 2012-08-19T20:40:04.793 回答
0

当您第一次走过时(在 onCreate 中发生),guessword 为空。你可以做的一件事是改变

 if(guessword[i]==appword[i])

 if(guessword != null && guessword.length =< i && guessword[i]==appword[i])
于 2012-08-19T20:39:50.243 回答
0

如果您只想将输入的文本与“TRUE”进行比较,您可以简单地执行以下操作:

String guessword = guess.getText().toString();
if ("TRUE".equals(guessword)) {
   ...
}
于 2012-08-19T20:48:26.403 回答