我有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。
所以,是的,如果有人可以帮助或指出我正确的方向,那就太好了。
答案 0 :(得分:4)
如前所述,您从错误的index
开始,因为Java中的Arrays
的基数为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()
。
答案 1 :(得分: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并添加你的玩家。添加它们之后,您可以循环遍历列表并检查String是否为空。
希望我能帮助你。
答案 2 :(得分: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++;
}
}
答案 3 :(得分:0)
无需检查两次,因为您已经将编辑文本中的值分配给字符串数组。所以使用
for (int i = 0; i<=9; i++)
{
if (speler[i] == "")
{
numberOfPlayers = i--;
break;
}
}
答案 4 :(得分: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();
}
答案 5 :(得分:0)
我不知道你的输出,但你没有提及,使用equals methos dude比较字符串值。
String a = new String(&#34; abc&#34;); String b = new String(&#34; abc&#34;);
现在,现在,a!= b; //因为它比较了这些String对象保存的内存! (它们是不同的对象)
和a.equals(b);是真的;因为equals方法比较了值,即abc。