循环没有返回

时间:2015-03-09 19:46:40

标签: java android

使用此代码检查字符串“name”并查看字母是否匹配,以及列表uNamesList的任何字母。一旦找到匹配项,我希望它返回数组中的匹配号。虽然,返回的结果总是相同的是5.如果没有找到匹配,则默认结果为5. 5虽然我确保EditText“name”总是与uNamesList中的字符串具有相似的字符。

uNamesList.add("bob");
uNamesList.add("mike");
uNamesList.add("sike");
uNamesList.add("othername");
uNamesList.add("name");



public int getName(EditText name) {
    int match = 1;
    String text = name.getText().toString();
    boolean found = false;
    for (int i = 0; i < text.length(); i++) { //i = current letter in text
        char cLetter = name.toString().charAt(i);
        for (int o = 0; o < uNamesList.size(); o++) {
            String uName = (String)uNamesList.get(o);
            char uLetter = uName.charAt(i);
            if (cLetter == uLetter) {
                return o;
                //match = o;
                //found = true;
                //break;

            }
        }
        //if(found) break;
    }
   return match;
}

注释代码只是我试图解决这个问题,因为我认为这是一个循环问题。

2 个答案:

答案 0 :(得分:1)

name.toString()不是您要匹配的字符串,因为nameEditText个实例。

变化

char cLetter = name.toString().charAt(i);

char cLetter = text.charAt(i);

即使使用此修复程序,您的代码也很奇怪,因为即使输入文本中只有一个字符与uName字符串的相应字符匹配,它也会返回匹配项。

你应该使用String :: equals:

public int getName(EditText name) {
    int match = 1;
    String text = name.getText().toString();
    for (int o = 0; o < uNamesList.size(); o++) {
        String uName = (String)uNamesList.get(o);
        if (text.equals(uName)) {
            return o;
        }
    }
    return match;
}

答案 1 :(得分:1)

如果您正在查看EditText中的字符串&#39; name&#39;在列表中并返回它的位置,也许你只需要:

uNamesList.indexOf(name.getText().toString());