java编程 只遍历一次 将两个int[]数组中相同的元素 打印出来

importjava.util.Arrays;publicclassArray1{ publicstaticvoidmain(String[]args)&nbs... import java.util.Arrays;public class Array1{ public static void main(String[] args) {  int []array={1,1,3,5,2,3};  int []array1={2,3,1,4,5,8};  Arrays.sort(array);  Arrays.sort(array1);  int i=0;  int j=0;  while(i<array.length&&j<array1.length)  {   if(array[i]==array1[j])   {    i++;    j++;   }   System.out.println(array[i]);   if(array[i]>array1[j])   {    j++;   }   if(array[i]<array1[j])   {    i++;   }  }  }}我写的 怎么报错 展开
 我来答
半截小丑
2017-07-26 · TA获得超过2019个赞
知道小有建树答主
回答量:548
采纳率:60%
帮助的人:214万
展开全部

因为你的3个if语句的正确关系应该是if……else if……的关系。

比如两个数组排序后分别是{1,4}和{1,3},那么你执行第一个if后则 i 和 j 都变成了1,执行完第二个if后则 j 变成了2,那么要执行第三个if的时候 j 就过界了,就会报错

import java.util.Arrays;


public class Array1 {
    public static void main(String[] args) {
        int[] array = { 1, 1, 3, 5, 2, 3 };
        int[] array1 = { 2, 3, 1, 4, 5, 8 };
        Arrays.sort(array);
        Arrays.sort(array1);

        int i = 0;
        int j = 0;

        while ((i < array.length) && (j < array1.length)) {
            if (array[i] == array1[j]) {
System.out.println(array[i]);
                i++;
                j++;
            } else if (array[i] > array1[j]) {
                j++;
            } else if (array[i] < array1[j]) {
                i++;
            }
        }
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
longge761001654b3
2017-07-26 · TA获得超过1067个赞
知道小有建树答主
回答量:356
采纳率:66%
帮助的人:205万
展开全部

数组越界了,这个思路不对,下面代码是遍历数组array,如果array1中存在,则打印该元素:

public static void main(String[] args) {
    int[] array = {1, 1, 3, 5, 2, 3};
    int[] array1 = {2, 3, 1, 4, 5, 8};
    for(int key : array){
        int result = Arrays.binarySearch(array1, key);
        if(result != -1){
            System.out.println(key);
        }
    }
}

PS: Arrays.binarySearch(int[], int)用于搜索指定的 int 型数组,如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
li136960366
2012-07-23 · TA获得超过451个赞
知道小有建树答主
回答量:234
采纳率:0%
帮助的人:241万
展开全部
执行了下 ,数组越界BUG,第一个IF判断相等之后 i和j会+1 在打印和判断肯定会报错啊
我改了下 可以了
public static void main(String[] args) {
int[] array = { 1, 1, 3, 5, 2, 3 };
int[] array1 = { 2, 3, 1, 4, 5, 8 };
Arrays.sort(array);
Arrays.sort(array1);
int i = 0;
int j = 0;
while (i < array.length && j < array1.length) {
if (array[i] == array1[j]) {
i++;
j++;
}
if(i<array.length)
{
System.out.println(array[i]);
}

if (i<array.length && array[i] > array1[j] ) {
j++;
}
if (i<array.length && array[i] < array1[j]) {
i++;
}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶飘零ding
2017-07-26 · TA获得超过110个赞
知道答主
回答量:62
采纳率:0%
帮助的人:13.2万
展开全部

你逻辑爆炸了,在你的基础上改了一下,望采纳!

import java.util.Arrays;

public class Array1{
    public static void main(String[] args) {
        int []array={1,1,3,5,2,3};
        int []array1={2,3,1,4,5,8};
        Arrays.sort(array);
        Arrays.sort(array1);
        int i=0;
        int j=0;
       Arrays.sort(array); //数组排序
       Arrays.sort(array1);

        while(i<array.length&&j<array1.length)  {
            if(array[i]==array1[j]){ System.out.println(array[i]); i++; j++;   }
            else if(array[i]>array1[j]) {
                if (j>=array1.length) break;
                j++;}
           else
            {if (i>=array.length) break;i++;}
        }
    }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友10b6e8b
2017-07-26 · TA获得超过234个赞
知道小有建树答主
回答量:195
采纳率:68%
帮助的人:94.8万
展开全部
//你写的方法有问题,你只需要把两个数组的所有元素对比一下就行了,也不用排序
public class Test{ 
public static void main(String[] args) {  
int []array={1,1,3,5,2,3,6};  
int []array1={2,3,1,4,5,8};  
for(int i = 0;i<array.length;i++){
for(int j = 0;j<array1.length;j++){
if(array[i]==array1[j]){
System.out.println(array[i]);
}
}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式