我正在努力做一件非常简单的事情。循环遍历数组并在一次迭代中获取两个元素而不是一个。这是代码,也许有人会指出我的错误:)
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。我希望这有点清楚
答案 0 :(得分:2)
无论是什么不起作用都不直接与循环结构相关,假设临时是具有偶数个元素的List。我根据您的代码编写了一个简化的测试程序:
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
答案 1 :(得分:1)
上述代码有可能在行
中抛出ArrayIndexOutOfBoundsException ls2.setText("i= "+j+ "info " + temporary.get(j).toString());
因为你检查我是否&lt;如果临时List或Vector具有奇数个值,上述代码将失败,则for循环中的temporary.size()。
答案 2 :(得分: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);
}
答案 3 :(得分:0)
我发现在for循环体中增加索引比在try循环声明中尝试跟踪多个变量然后“双增量”更简单。
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);
}