我有点困惑,我需要一些澄清。不太确定我是否在正确的轨道上,因此这个帖子。
这是我想要解密为高级foreach循环的代码。
int[] arrayA = {3, 35, 2, 1, 45, 92, 83, 114};
int[] arrayB = {4, 83, 5, 9, 114, 3, 7, 1};
int n = arrayA.length;
int m = arrayB.length;
int[] arrayC = new int[n + m];
int k = 0;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
if(arrayB[j] == arrayA[i])
{
arrayC[k++] = arrayA[i];
}
}
}
for(int i=0; i<l;i++)
System.out.print(arrayC[i] + " ");
System.out.println();
到目前为止,这是我被困的地方:
int[] a = {3, 8, 2, 4, 5, 1, 6};
int[] b = {4, 7, 9, 8, 2};
int[] c = new int[a.length + b.length];
int k = 0;
for(int i : a)
{
for(int j : b)
{
if(a[i] == b[j])
{
c[k++] = a[i];
}
}
//System.out.println(c[i]);
}
for(int i=0; i<c.length;i++)
System.out.print(c[i] + " ");
System.out.println();
}
答案 0 :(得分:3)
你快到了
for(int i : a)
{
for(int j : b)
{
if(i == j)
{
c[k++] = i;
}
}
}
for(int i : a)
使用a
访问数组i
中的元素。
如果a
为{3, 8, 2, 4, 5, 1, 6}
,则i
在每次迭代时都为3,8,2,..
,您不应该使用它来索引原始数组。如果您这样做,您将收到错误的数字或ArrayIndexOutOfBoundsException
由于您要选择两个数组中存在的数字,因此数组c
的长度可以是max(a.length, b.length)
。所以,int[] c = new int[Math.max(a.length, b.length)];
就足够了。
如果要在结尾处截断0
,可以执行
c = Arrays.copyOf(c, k);
这将返回一个仅包含k
的第一个c
元素的新数组。
答案 1 :(得分:1)
我会使用List
和retainAll
。在Java 8+中,您可以将int[]
转换为List<Integer>
,例如
int[] arrayA = { 3, 35, 2, 1, 45, 92, 83, 114 };
int[] arrayB = { 4, 83, 5, 9, 114, 3, 7, 1 };
List<Integer> al = Arrays.stream(arrayA).boxed().collect(Collectors.toList());
al.retainAll(Arrays.stream(arrayB).boxed().collect(Collectors.toList()));
System.out.println(al.stream().map(String::valueOf).collect(Collectors.joining(" ")));
输出
3 1 83 114
或者,如果您实际上除了显示它们之外并不需要这些值,并且您想要使用for-each
循环(并且效率较低),例如
int[] arrayA = { 3, 35, 2, 1, 45, 92, 83, 114 };
int[] arrayB = { 4, 83, 5, 9, 114, 3, 7, 1 };
for (int i : arrayA) {
for (int j : arrayB) {
if (i == j) {
System.out.print(i + " ");
}
}
}
System.out.println();
答案 2 :(得分:0)
临时变量不是foreach
循环中数组中的索引。因此,在第0次迭代中,i
包含a
的第0个元素,j
包含b
中的第0个元素。你的尝试应该是这样的:
int[] a = {3, 8, 2, 4, 5, 1, 6};
int[] b = {4, 7, 9, 8, 2};
int[] c = new int[a.length + b.length];
int k = 0;
for(int i : a) {
for(int j : b) {
if(i == j) {
c[k++] = i;
}
} //System.out.println(c[i]);
}
请注意,您的c[]
数组将包含a[]
中维护的订单。