Java 从一个数组获取数据以创建另一个数组。什么';这个循环有什么问题?

Java 从一个数组获取数据以创建另一个数组。什么';这个循环有什么问题?,java,arrays,eclipse,loops,Java,Arrays,Eclipse,Loops,我正在做一个赋值,我需要创建两个数组,然后查看它们并创建一个新数组,其中包含前两个数组中的任何值。最初,我通过制作arraylist接近完成这一点,但我的实验室教授告诉我这是不允许的,所以我需要重新开始,没有足够的时间找出解决方案 如果您想查看我现在拥有的全部代码: 在这里,我真的在与这个循环作斗争: for(int i = 0 ; i < Xarr.length ; i++){ for(int j = 0 ; j < Yarr.length ; j++) /

我正在做一个赋值,我需要创建两个数组,然后查看它们并创建一个新数组,其中包含前两个数组中的任何值。最初,我通过制作arraylist接近完成这一点,但我的实验室教授告诉我这是不允许的,所以我需要重新开始,没有足够的时间找出解决方案

如果您想查看我现在拥有的全部代码:

在这里,我真的在与这个循环作斗争:

for(int i = 0 ; i < Xarr.length ; i++){
    for(int j = 0 ; j < Yarr.length ; j++)
        //Compare. If the two are the same, they go inside of A.
        if (Xarr[i] == Yarr[j]){
        ArrA[k] = Xarr[i]; 
        k++;
        System.out.println(ArrA[k]);
        break;
}
for(int i=0;i

我的ArrA[k]阵列的输出仍为0。我似乎无法自行解决此问题。

尝试进行这些更改

for(int i = 0 ; i < Xarr.length ; i++){
    for(int j = 0 ; j < Yarr.length ; j++)
        //Compare. If the two are the same, they go inside of A.
        if (Xarr[i] == Yarr[j]){
            ArrA[k] = Xarr[i]; 
            System.out.println(ArrA[k]);  // or print them all later
            k++;
            break;  // break to outer loop 
        }
    }
}
for(int i=0;i
注意

假设OP已正确初始化
ArrA

注2


假设只需要唯一的值,那么您的解决方案是否要求ArrA中没有重复的值?或者是否允许重复值?例如,如果某些值在每个数组中出现多次,则可以在同一个数字上获得多个匹配项

如果重复项不是问题:

for(int i = 0 ; i < Xarr.length ; i++){
for(int j = 0 ; j < Yarr.length ; j++){
    //Compare. If the two are the same, they go inside of A.
    if (Xarr[i] == Yarr[j]){
        ArrA[k] = Xarr[i]; 
        System.out.println(ArrA[k]);
        k++;
    }
}}
for(int i=0;i
据我所知,问题是取2个数组,然后生成第三个数组,它是前2个数组的并集。两个集合的并集是两个集合中的值的子集

你的代码缺少一些大括号,所以把它们放回去。另外,在
ArrA[k]
im中输入一个值后,您也不想打印
k+1
th项

否则你就差不多在那儿了。
break
终止内部循环,并允许外部循环增加
i
并继续。这是因为您已经找到了匹配项,无需继续搜索,只需移动到
Xarr
中的下一个索引即可

算法是这样的:对于X中的每个值,在Y中搜索匹配项。如果找到,则将此值添加到A

for(int i = 0 ; i < Xarr.length ; i++) {
    for(int j = 0 ; j < Yarr.length ; j++) {
        //Compare. If the two are the same, they go inside of A.
        if (Xarr[i] == Yarr[j]){
            ArrA[k] = Xarr[i]; 
            System.out.println(ArrA[k]);
            k++; //you probably want to increment k after you add to ArrA, not before
            break;
        }
    }
}
for(int i=0;i
公共静态void main(字符串…参数){
int[]xArr={1,1,1,1,1};
int[]yArr={1,};
int[]kArr=newint[xArr.length>yArr.length?xArr.length:yArr.length];
int k=0;
对于(int x=0;x
首先,给xArr和yArr一些随机数,然后用我们正在比较的最大数组的大小初始化kArr,以确保数组有足够的空间容纳相似的值

然后,在下一节中,我们在一个循环中执行一个循环,以相互比较这些值,如果它们相似,则使用k++并在数组中设置下一个值。这一直持续到循环完成,请注意,在比较所有值之前,根本不需要中断任何一个循环。在这一点上,循环会自行中断并继续执行下一位代码

最后一节只是创建一个与k大小相同的数组,并将值移到上面,我不知道您研究的要求,尽管在使用这样的原语时,您可能希望这样做,以防您有一个匹配的0作为数字。否则,将有大量0填充数组的空白

最后,我们只是对数组进行排序,以获得良好的度量值,并将其打印出来。
希望我已经回答了你的问题,你能从这篇文章中得到一些东西

问题是在k++之后打印ArrA[k]。试着在打印后增加行数。

首先,你缺少的大括号太多了。其次,当发现相同的东西时,为什么要中断?您确定要在打印
ArrA[k]
之前增加
k
?@AndrewL。可能是因为他已经在
Yarr
中的两个数组中找到了匹配项,所以请转到X.Yarr matey中的下一个索引。但是中断将中断内部循环。不确定这是不是必要的为什么不呢?这是一个x^2算法。对于X中的每个索引,遍历Y。如果找到匹配项,则将其添加到第三个数组中,然后继续到X中的下一个索引。我认为中断到外部循环是不正确的。
public static void main(String... args){
    int[] xArr = {1, 1,1,1,1,1};
    int[] yArr = {1, };
    int[] kArr = new int[xArr.length > yArr.length ? xArr.length : yArr.length];


    int k = 0;
    for(int x = 0; x < xArr.length; x++){
        for(int y = 0; y < yArr.length; y ++){
            int xNum = xArr[x];
            int yNum = yArr[y];
            if(xNum == yNum) kArr[k++] = xNum;
        }
    }

    int[] resizedKArr = new int[k];
    for(int i = 0; i < resizedKArr.length; i++) resizedKArr[i] = kArr[i];
    Arrays.sort(resizedKArr);

    for(int x : resizedKArr) System.out.println(x);
}