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

すでに述べたように、Java ではベースが 0 であり、ループが間違っているindexため、間違った方法で開始しています。Arraysまた、文字列の比較が間違っています。それは次のようなものでなければなりません

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

改善のヒント :

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 に答える