-3

私は非常に単純なものを作ろうとしています。配列をループし、1 回ではなく 1 回の繰り返しで 2 つの要素を取得します。これがコードです、多分誰かが私の間違いを指摘するでしょう:)

        for(int i = 0; i < temporary.size(); i = i + 2)
        {

            LayoutInflater inflater;
            inflater = (LayoutInflater) activity.getParent().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v = inflater.inflate(R.layout.smartuilinear ,
                            null);
                Button ls1, ls2;
                ls1 = (Button) v.findViewById(R.id.ls1);
                ls2 = (Button) v.findViewById(R.id.ls2);
                ls1.setText("i= "+i+ "info " + temporary.get(i).toString());
                int j = i + 1;
                ls2.setText("i= "+j+ "info " + temporary.get(j).toString());

            linear.addView(v);
        }

編集:サイズが奇数の場合の問題。私はその最後の要素を失いたくありません。サイズが奇数の場合は値を減らします。


私の質問は十分に明確ではなかったと思います。ループは機能しますが、リストのサイズが偶数でない場合、リストの最後のオブジェクトを失うことはありませんか? 明らかに、最後のループでリストのサイズが均一でない場合、j を初期化するべきではありません。これが少し明確になることを願っています

4

4 に答える 4

2

機能していないことが何であれ、一時的な要素が偶数のリストであると仮定すると、ループ構造に直接関係しません。あなたのコードに基づいて単純化されたテストプログラムを書きました:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {
  public static void main(String args[]) {
    String[] data = {"aaa","bbb","ccc","ddd"};
    List<String> temporary = new ArrayList<String>();
    temporary.addAll(Arrays.asList(data));
    for (int i = 0; i < temporary.size(); i = i + 2) {
      System.out.println("i= " + i + " first " + temporary.get(i).toString());
      int j = i + 1;
      System.out.println("i= " + j + " second " + temporary.get(j).toString());
    }
  }
}

実行され、次の出力が表示されます。

i= 0 first aaa
i= 1 second bbb
i= 2 first ccc
i= 3 second ddd

私のテスト プログラムには表示されていない残りのコードを確認する必要があります。障害の兆候と残りの変数の定義に関する手がかりがなければ、障害を診断することはできません。

================================================== ============================

問題の明確化に続いて、偶数または奇数の一時サイズを処理するテスト プログラムのバリエーションを次に示します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {
  public static void main(String args[]) {
    System.out.println("Odd length");
    test(new String[] { "aaa", "bbb", "ccc", "ddd", "eee" });
    System.out.println("Even length");
    test(new String[] { "xxx", "yyy" });
    System.out.println("Empty");
    test(new String[] {});
  }

  private static void test(String[] data) {
    List<String> temporary = new ArrayList<String>();
    temporary.addAll(Arrays.asList(data));
    for (int i = 0; i < temporary.size(); i = i + 2) {
      System.out.println("i= " + i + " first " + temporary.get(i).toString());
      int j = i + 1;
      if (j < temporary.size()) {
        System.out
            .println("i= " + j + " second " + temporary.get(j).toString());
      }
    }
  }
}

出力:

Odd length
i= 0 first aaa
i= 1 second bbb
i= 2 first ccc
i= 3 second ddd
i= 4 first eee
Even length
i= 0 first xxx
i= 1 second yyy
Empty
于 2013-03-01T15:01:30.193 に答える
1

ある時点で失敗します!

私があなたなら、そのリストに自分の値を保存する方法を改善する方法を検討します。

たとえば、あなたは次のようなより良いものを持つことができます

List<String[]> temporary = new ArrayList<String[]>();
temporary.add(new String[]{value1, value2});

それで:

    for(int i = 0; i < temporary.size(); i++)
    {

        LayoutInflater inflater;
        inflater = (LayoutInflater) activity.getParent().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflater.inflate(R.layout.smartuilinear ,
                        null);
            Button ls1, ls2;
            ls1 = (Button) v.findViewById(R.id.ls1);
            ls2 = (Button) v.findViewById(R.id.ls2);
            String[] subValues = temporary.get(i);
            ls1.setText("info " + subValues[0]);
            ls2.setText("info 2" + subValues[1]);
        linear.addView(v);
    }
于 2013-03-01T14:35:16.740 に答える
1

上記のコードが行に ArrayIndexOutOfBoundsException をスローする可能性があります

  ls2.setText("i= "+j+ "info " + temporary.get(j).toString());

一時的な List または Vector の値が奇数の場合、 for ループで i < temporary.size() かどうかを確認するため、上記のコードは失敗します。

于 2013-03-01T14:33:45.807 に答える
0

複数の変数を追跡してからforループ宣言で「二重インクリメント」するよりも、forループ本体内でインデックスをインクリメントする方が簡単だと思います。

for(int i = 0, s=temporary.size(); i < s; **++i**)
{
    LayoutInflater inflater = (LayoutInflater) activity.getParent().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.smartuilinear,  null);
    Button ls1 = (Button) v.findViewById(R.id.ls1);
    Button ls2 = (Button) v.findViewById(R.id.ls2);
    ls1.setText("i= "+i+ "info " + temporary.get(i).toString());
    **++i;**
    ls2.setText("i= "+i+ "info " + temporary.get(i).toString());
    linear.addView(v);
}
于 2013-03-01T14:35:36.800 に答える