Java:Loop认为列表,然后检查结果是否为其他

时间:2019-07-20 10:34:19

标签: java android

我遇到了其中有名称项的Arraylist的情况。我需要遍历该列表,以检查用户提供的新名称是否已经在列表中。如果是这样,只需举杯以告知用户该名称已经存在,否则,请向列表中添加名称。

这就是我所拥有的:

public class ActivityPlayers extends AppCompatActivity {
    public static ArrayList<NameItem> mNameList;

    private Button buttonAdd;
    private EditText textAdd;

    private int checkNumber;


        /** When "add" button been clicked... **/
        textAdd = findViewById(R.id.name_input);
        buttonAdd.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                /** Loop the list **/
                for (int i = 0; i < mNameList.size(); i++) {

                    /** Check if user input match to any name in list 
                    and if it does...**/
                    if (mNameList.get(i).getText1().equals(textAdd.toString().trim())) {
                        checkNumber = 1;
                        break;
                    } else {
                        /** If it doesn't **/
                        checkNumber = 0;
                    }
                }

                /** if checkNumber is still 0 **/
                if (checkNumber == 0) {
                    /** Close soft keyboard **/
                    InputMethodManager input = (InputMethodManager)
                            getSystemService(Context.INPUT_METHOD_SERVICE);
                    input.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                            InputMethodManager.HIDE_NOT_ALWAYS);

                    /** ...add a name to the namelist **/
                    addItem(0);
                } else {
                    /** if name in a list == name from input, give toast **/
                    Toast toast = Toast.makeText(getApplicationContext(),
                            "Name is already on a list", Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
                    toast.show();
                }
            }
        });

有什么想法为什么行不通?它只会将名称添加到列表中,即使已经存在也是如此...但是它永远不会检测到重复项...

3 个答案:

答案 0 :(得分:2)

if (mNameList.get(i).getText1().equals(textAdd.toString().trim()))

在上面的代码行中,将第 i 个列表元素与EditText本身的字符串表示形式而不是其Text字段进行比较。您应该使用textAdd.toString()代替textAdd.getText()

与问题无关,但是我建议使用boolean变量来表示代码中的逻辑标志,而不是整数计数。
在上面的示例中,它将如下所示:

private boolean nameInList = false;
//...
if (...) {
    nameInList = true;
    break;
}
//...
if (nameInList) {
    //...
} else {
    //...
}

答案 1 :(得分:0)

尝试一下:

if (mNameList.get(i).getText1().equalsIgnoreCase(textAdd.getText().toString().trim())) {
    checkNumber = 1;
    break;
} else {
    /** If it doesn't **/
    checkNumber = 0;
}

答案 2 :(得分:0)

我建议您使用合适的数据结构 Set ,该结构不允许重复值。您还将从循环中保存自己。

例如创建一个设置对象 Set<String> names = new TreeSet();调用 add(),如果set中不存在名称,则返回true,否则返回false表示名称存在。

Set<String> names = TreeSet();
boolean isExists = names.add("my name");
if(isExists){ // make you toast here}