
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++; } } }}我写的 怎么报错
展开
展开全部
因为你的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++;
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组越界了,这个思路不对,下面代码是遍历数组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)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
执行了下 ,数组越界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++;
}
}
}
我改了下 可以了
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++;
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你逻辑爆炸了,在你的基础上改了一下,望采纳!
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++;}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//你写的方法有问题,你只需要把两个数组的所有元素对比一下就行了,也不用排序
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]);
}
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询