public static void main(String[] args) {
int[] arr={1,2,9,4,15,6,7};
int[] cun={15,2,3,9,5,1,7};
int redn = 0;
for(int i = 0;i < cun.length-1;i++){
int number = cun[i];
for(int j = 0;j < arr.length-1;j++){
if(number == arr[i]){
redn++;
break ;
}
}
}
System.out.print(redn);
}
代码判断arr数组中存在几个cun数组的数字,为什么位置对了而且数字相同才成功,位置不对数字相同不成功啊
这里改成 if(number == arr[j]) i是外层循环的变量,所以只有位置对了才能成功
if(number == arr[i]) 要用 arr[j]。你用的i,就是找相同位置相同数字。
可以利用两个 for 循环遍历两个数组,再逐一比对每一个元素是否相同,如果相同就加减奖品数目。具体实现如下:
public class Main {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {5, 4, 3, 2, 1};
int prizeCount = 0; // 记录中奖数
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] == arr2[i]) { // 判断元素是否相同
prizeCount++; // 如果相同,奖品数目+1
}
}
System.out.println("中奖数目为:" + prizeCount);
}
}
但题目中也指出了,如果位置不对但数字相同则不算中奖,如果不考虑数字相同但位置不同的情况,则可以先将两个数组排序,然后再进行比对。具体实现如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] arr1 = {5, 2, 4, 1, 3};
int[] arr2 = {1, 2, 3, 4, 5};
int prizeCount = 0; // 记录中奖数
Arrays.sort(arr1); // 数组排序
Arrays.sort(arr2);
int i = 0, j = 0; // i 指针控制数组 arr1 中的下标,j 指针控制数组 arr2 中的下标
while (i < arr1.length && j < arr2.length) {
if (arr1[i] == arr2[j]) { // 判断元素是否相同
prizeCount++; // 如果相同,奖品数目+1
i++; // 增加下标
j++;
} else if (arr1[i] < arr2[j]) { // arr1 元素较小,将其下标向后移动
i++;
} else { // arr2 元素较小,将其下标向后移动
j++;
}
}
System.out.println("中奖数目为:" + prizeCount);
}
}