我正在进行递归编程工作,我试图找出如何在更大的ArrayList中循环并获取ArrayList的值。我发现其他人之前已经提出过这个问题,但目前还不是很清楚如何才能做到这一点。
以下是我尝试做的一个例子:
import java.util.*;
public class Test{
public static void main(String[] args) {
ArrayList<String> Array1 = new ArrayList<String>();
// Array 1: [0][1][0][0][1]
Array1.add("0");
Array1.add("1");
Array1.add("0");
Array1.add("0");
Array1.add("1");
ArrayList<String> Array2 = new ArrayList<String>();
// Array 2: [1][0][0][1][0]
Array2.add("1");
Array2.add("0");
Array2.add("0");
Array2.add("1");
Array2.add("0");
ArrayList<ArrayList<String>> Array3 = new ArrayList<ArrayList<String>>();
// Array 3: [Array1][Array2]
Array3.add(Array1);
Array3.add(Array2);
// Now Find every indices or occurrences in Array2 where value is "1"
for (ArrayList<String> Outer : Array3) {
for (String inner : Outer) {
if (str.equals("1")) {
// Get all indices where "1" is found inside Array2 ?
}
}
}
}
}
所以我有Array3存储 Array1 和 Array2 ,我想要做的是循环Array3,找到Array2和Array2中的索引,其值为&#34 1#34;
此代码中的循环问题是它遍历Array1和Array2中的所有值,而我只是试图找到Array2中的值。
答案 0 :(得分:1)
您可以使用以下内容:
for (ArrayList<String> Outer : Array3) {
for (int i = 0; i < Outer.size(); i++) {
if (Outer == Array2 && Outer.get(i).equals("1")) {
// The index is stored in 'i'
}
}
}
虽然我不明白为什么你只想在后者中查找索引时迭代ArrayList
。
迭代Array2
:
for (int i = 0; i < Array2.size(); i++) {
if (Array2.get(i).equals("1")) {
// The index is stored in 'i'
}
}
答案 1 :(得分:0)
这是你的主要应该是什么样的
public static void main(String[] args) {
ArrayList<String> Array1 = new ArrayList<String>();
// Array 1: [0][1][0][0][1]
Array1.add("0");
Array1.add("1");
Array1.add("0");
Array1.add("0");
Array1.add("1");
ArrayList<String> Array2 = new ArrayList<String>();
// Array 2: [1][0][0][1][0]
Array2.add("1");
Array2.add("0");
Array2.add("0");
Array2.add("1");
Array2.add("0");
ArrayList<ArrayList<String>> Array3 = new ArrayList<ArrayList<String>>();
// Array 3: [Array1][Array2]
Array3.add(Array1);
Array3.add(Array2);
// Now Find every indices or occurrences in Array2 where value is "1"
int i = 0;
for (String s: Array3.get(1)) {
if (s.equals("1")) {
// Get all indices where "1" is found inside Array2 ?
System.out.println(i);
}
i++;
}
}
如果你只想在第二个ArrayList循环中找到它。通过get函数从Array3获取if
答案 2 :(得分:0)
我建议将ArrayList<String>
更改为ArrayList<Integer>
作为一种良好的编码方法。
ArrayList<Integer> Array1 = new ArrayList<Integer>(Arrays.asList(0,1,0,0,1));
ArrayList<Integer> Array2 = new ArrayList<Integer>(Arrays.asList(1,0,0,1,0));
// Quick way to clear ArrayList
List<ArrayList<Integer>> Array3 = new ArrayList<ArrayList<Integer>>();
Array3.add(Array1);
Array3.add(Array2);
for (ArrayList<Integer> al : Array3) {
if (al != Array2) { // check only for ArrayList2
continue;
}
for (Integer I : al) { // Iterate ArrayList2
if (I.equals(1)) {
// 1 is stored in ArrayList2
}
}
}
}
答案 3 :(得分:0)
如果您有兴趣从Array2
查找“1”的计数(出现次数),这是一个简单的Java8解决方案,如下所示,带有内联注释:
Array3.stream().
skip(1). //skip the first array
flatMap(List::stream). //get the stream of elements from second array
filter(value -> value.equals("1")).//check which elements are equal to 1
count();//count how many
此外,我强烈建议您严格遵循Java命名标准(请参阅here),因为变量名称必须以小写字母开头(例如array3
,而不是Array3
})这样可以更容易阅读并遵循您的代码。