我编写了一个带有两个Lists的程序的代码,如果第二个数组的所有元素也出现在第一个数组中,则返回true。但是,此代码仅适用于两个大小相等的数组(例如{1,2,3}和{3,2,1}返回true)但如果第一个数组大于第二个数组,则会得到rangeCheck异常(完全期待这一点,公平)。
import java.util.*;
public class Ex8 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("How many numbers do you wish to enter into the
array?");
int thisMany = scanner.nextInt();
ArrayList<Integer> numbers = new ArrayList<Integer>();
System.out.println("Please enter some numbers, separated by
spaces");
for(int i = 0; i<thisMany; i++) {
int x = scanner.nextInt();
numbers.add(x);
}
Scanner sc = new Scanner(System.in);
System.out.println("How many numbers do you wish to enter into the
second array?");
int nowThisMany = sc.nextInt();
ArrayList<Integer> numbers2 = new ArrayList<Integer>();
System.out.println("Enter some numbers, separated by spaces");
for(int j = 0; j<nowThisMany; j++) {
int y = sc.nextInt();
numbers2.add(y);
}
System.out.println(Arrays.toString(numbers.toArray()));
System.out.println(Arrays.toString(numbers2.toArray()));
isContained(numbers, numbers2);
System.out.println(isContained(numbers, numbers2));
}
public static boolean isContained(ArrayList<Integer> numbers,
ArrayList<Integer> numbers2) {
boolean equalsTest = false;
for(int i = 0; i<numbers.size(); i++) { //This gives exception if
//both arrays aren't the same size
if(numbers.get(i) == numbers2.get(i)) {
equalsTest = true;
}
}
return equalsTest;
}
}
任何人都可以向我解释如何在没有遇到异常的情况下检查第一个数组的第二个数组吗?感谢
答案 0 :(得分:0)
如果{1,2,3}和{3,2,1}使用您当前的代码返回true,我会感到惊讶。由于您要检查numbers2
中的每个项目是否在numbers
,请迭代numbers2
并检查每个项目是否在numbers
。
public static boolean isContained(ArrayList<Integer> numbers,
ArrayList<Integer> numbers2) {
outer:
for(int i = 0; i<numbers2.size(); i++) {
for(int j = 0; j<numbers.size(); j++){
if(numbers2.get(i) == numbers.get(j)){
continue outer;
return false;
return true;
答案 1 :(得分:0)
你得到了例外,因为你没有检查哪个数组更大。您可以添加如下语句:
public static boolean isContained(ArrayList<Integer> numbers,
ArrayList<Integer> numbers2) {
boolean equalsTest = false;
if(numbers.size() > numbers2.size()){
for(int i = 0; i<numbers.size(); i++) {
if(numbers.get(i) == numbers2.get(i)) {
public static boolean isContained(ArrayList<Integer> numbers, ArrayList<Integer> numbers2) {
boolean equalsTest = false;
for(int i = 0; i<numbers.size(); i++) {
if(numbers.get(i) == numbers2.get(i)) {
equalsTest = true;
}
}
return equalsTest;
}
equalsTest = true;
}
}
return equalsTest;
}
else ;// Here add a logic of checking if the second list is larger
}
答案 2 :(得分:0)
正如寻求帮助的情况一样,我发现在发布问题后,解决方案会在一段时间后出现。
无论如何,我设法通过使用int j
的嵌套for循环来解决问题,以通过第二个List。这是我在isContained
方法中使用的代码:
public static boolean isContained(ArrayList<Integer> numbers,
ArrayList<Integer> numbers2) {
boolean equalsTest = false;
for(int i = 0; i<=numbers.size()-1; i++) {
for(int j = 0; j<=numbers2.size()-1; j++) { //This second for loop goes through the elements of the second List separately without causing an exceptoion
if(numbers.get(i) == numbers2.get(j)) {
equalsTest = true;
break;
}
}
}
return equalsTest;
}
答案 3 :(得分:0)
您的代码出现问题:
if(numbers.get(i) == numbers2.get(i)) {
考虑到当大小不相等时你不能这样做,因为当你的第一个数组包含5个元素而第二个数组包含2个元素时,你会尝试比较
if(numbers.get(3) == numbers2.get(3)) {
其中numbers2没有该元素,这就是你得到错误的原因, 如果你想检查一个包含另一个数组的数组,那么简单的方法是使用
boolean Collection.containsAll(Collection<?> c);
但如果您正在尝试编写自己的代码,请确保您正在考虑以下方面,并更新您的代码: