0

我有 10 个 editTexts,我从中获取文本:

EditText naamField1 = (EditText) findViewById(R.id.naam1);
        EditText naamField2 = (EditText) findViewById(R.id.naam2);
        EditText naamField3 = (EditText) findViewById(R.id.naam3);
        EditText naamField4 = (EditText) findViewById(R.id.naam4);
        EditText naamField5 = (EditText) findViewById(R.id.naam5);
        EditText naamField6 = (EditText) findViewById(R.id.naam6);
        EditText naamField7 = (EditText) findViewById(R.id.naam7);
        EditText naamField8 = (EditText) findViewById(R.id.naam8);
        EditText naamField9 = (EditText) findViewById(R.id.naam9);
        EditText naamField10 = (EditText) findViewById(R.id.naam10);
        speler[1] = naamField1.getText().toString();
        speler[2] = naamField2.getText().toString();
        speler[3] = naamField3.getText().toString();
        speler[4] = naamField4.getText().toString();
        speler[5] = naamField5.getText().toString();
        speler[6] = naamField6.getText().toString();
        speler[7] = naamField7.getText().toString();
        speler[8] = naamField8.getText().toString();
        speler[9] = naamField9.getText().toString();
        speler[10] = naamField10.getText().toString();

承认,这不是最漂亮的代码,但是我如何检查这些字符串中有多少个,edittexts 是空的?到目前为止我已经尝试过

for (int i = 1; i==10; i++)
        {
            if (speler[i] == "")
            {
                numberOfPlayers = i--;
                break;
            }
        }

for (int i = 1; i==10; i++)
        {
            if (!TextUtils.isEmpty(speler[i]))
            {
                numberOfPlayers++;
            }
        }

我在代码的开头将 numberOfPlayers 声明为 0。

所以,是的,如果有人可以帮助或指出我正确的方向,那就太好了。

4

6 回答 6

4

如前所述,您从错误开始,index因为Arrays在 Java 中,基数为 0 并且您的循环是错误的。此外,您正在比较错误的字符串。它应该是这样的

for (int i =0; i<10; i++)
    {
        if (speler[i].equals(""))
        {
            numberOfPlayers = i--;
            break;
        }
    }

一种可能更有效和更安全的方式来做你拥有的方式是

for (int i = 1; i<speler.length; i++)
    {
        if ("".equals(speler[i]))
        {
            numberOfPlayers = i--;
            break;
        }
    }

这样,如果数组长度发生变化,您不必继续调整,for loop因为它现在不是硬编码的。它还可以防止NPE切换.equals()语句。

于 2013-08-09T14:28:10.067 回答
1
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("Buffon");
arrayList.add("");
arrayList.add("Messi");
arrayList.add("");
int count= 0;
for(String player:arrayList){
    if(!player.equals("")){
        count++;
    }
}
Log.d("playercount", "currentPlayers: "+count);

我就是这样做的。

您必须创建一个 ArrayList 并添加您的播放器。添加它们后,您可以遍历列表并检查字符串是否为空。

希望我能帮助你。

于 2013-08-09T14:27:18.423 回答
1

您必须在检查时将值放入字符串数组中。如果将它们放在数组中,假设在 OnCreate 中,值将在数组中,如果您执行循环,则在某个按钮单击侦听器中说,同时用户更改文本框的内容,您在侦听器中的代码将是错误的。

你需要先声明字符串数组:

String[] speler = new String[10]; // array with indexes from 0 to 9 (nonresizable)

然后检查循环:

for(int i=0; i<10;i++)
{
     if(speler[i].equals(""))
     {
        counter++;                          
     }
}
于 2013-08-09T14:48:25.243 回答
0

无需检查两次,因为您已经将值从编辑文本分配给字符串数组。所以用

for (int i = 0; i<=9; i++) { if (speler[i] == "") { numberOfPlayers = i--; break; } }

于 2013-08-09T14:30:30.510 回答
0

改进提示

private static final int EDIT_TEXT_IDS = {
    R.id.naam1,
    R.id.naam2,
    R.id.naam3,
    R.id.naam4,
    R.id.naam5,
    R.id.naam6,
    R.id.naam7,
    R.id.naam8,
    R.id.naam9,
    R.id.naam10}

...

EditText[] naamField = new EditText[10];
for (int i=0; i<10; i++) {
  naamField[i] = (EditText) findViewById(EDIT_TEXT_IDS[i]);
  speler[i] = naamField[i].getText().toString();
}
于 2013-08-09T14:36:12.823 回答
0

我不知道你的输出,但你没有提到,使用 equals 方法比较字符串值伙计。

字符串 a=new String("abc"); 字符串 b=new String("abc");

现在,现在,a!= b;// 因为它比较了保存这些 String 对象的内存!(它们是不同的对象)

和 a.equals(b);是真的; 因为 equals 方法比较的是 abc 的值。

于 2013-08-09T15:47:28.730 回答