Помогите с задачкой по java
Я новичок в java и сейчас работаю с массивами, мне нужно сравнить 2 массива и узнать есть ли в них разные числа, но у меня почему-то появляются какие-то проблемы с выводом. Вот код:
int[] a = {2, 6 , 1, 8, 12, 7};
int[] b = {3, 2, 7, 5, 4, 8, 9, 25, 87, 126, 216};
System.out.print("Одинаковые числа: ");
for(int i = 0; i < 6; i++){
for(int j = 0; j < 11; j++){
if(a[i] == b[j]){
System.out.print(a[i] + ", ");
}
}
}
System.out.print("\nРазные числа: ");
for(int i = 0; i < 6; i++){
for(int j = 0; j < 11; j++){
if(a[i] != b[j]){
System.out.print(a[i] + ", ");
}
}
}
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Можно попробовать решить вашу задачу при помощи ArrayList:
public class MyClass {
public static void main(String args[]) {
ArrayList<Integer> listOne = new ArrayList<>(Arrays.asList(2, 6 , 1, 8, 12, 7));
ArrayList<Integer> listTwo = new ArrayList<>(Arrays.asList(3, 2, 7, 5, 4, 8, 9, 25, 87, 126, 216));
for (Integer element : listTwo) {
if (listOne.contains(element)) {
System.out.println("Одинаковое число -> " + element);
} else {
System.out.println("Разное число -> " + element);
}
}
}
}
Если же вам нужно вывести все и сразу, то можно формировать итоговые массивы:
ArrayList<Integer> common = new ArrayList<>();
ArrayList<Integer> uncommon = new ArrayList<>();
for (Integer element : listTwo) {
if (listOne.contains(element)) {
common.add(element);
} else {
uncommon.add(element);
}
}
System.out.println("Одинаковые числа -> " + common.toString());
System.out.println("Разные числа -> " + uncommon.toString());
Вывод:
Одинаковые числа -> [2, 7, 8]
Разные числа -> [3, 5, 4, 9, 25, 87, 126, 216]
Итоговая программа:
public class MyClass {
public static void main(String args[]) {
ArrayList<Integer> listOne = new ArrayList<>(Arrays.asList(2, 6 , 1, 8, 12, 7));
ArrayList<Integer> listTwo = new ArrayList<>(Arrays.asList(3, 2, 7, 5, 4, 8, 9, 25, 87, 126, 216));
ArrayList<Integer> common = new ArrayList<>();
ArrayList<Integer> uncommon = new ArrayList<>();
for (Integer element : listTwo) {
if (listOne.contains(element)) {
common.add(element);
} else {
uncommon.add(element);
}
}
System.out.println("Одинаковые числа -> " + common.toString());
System.out.println("Разные числа -> " + uncommon.toString());
}
}
Я бы вам советовал использовать arrayList так как у него есть куча методов которые облегчают работу с элементами :)
UPDATE
Как уже было замечено в комментариях, можно использовать и сет для решения данной задачи:
public static void main(String args[]) {
Set<Integer> s1 = new HashSet<Integer>();
Set<Integer> s2 = new HashSet<Integer>();
s1.addAll(Arrays.asList(new Integer[] {2, 6 , 1, 8, 12, 7}));
s2.addAll(Arrays.asList(new Integer[] {3, 2, 7, 5, 4, 8, 9, 25, 87, 126, 216}));
Set<Integer> intersection = new HashSet<Integer>(s1);
intersection.retainAll(s2);
System.out.print("Есть в обоих массивах ");
System.out.println(intersection);
Set<Integer> difference1 = new HashSet<Integer>(s1);
difference1.removeAll(s2);
System.out.print("Есть в первом и нет во втором массиве ");
System.out.println(difference1);
Set<Integer> difference2 = new HashSet<Integer>(s2);
difference2.removeAll(s1);
System.out.print("Есть во втором и нет в первом массиве ");
System.out.println(difference2);
}
Вывод:
Есть в обоих массивах [2, 7, 8]
Есть в первом и нет во втором массиве [1, 6, 12]
Есть во втором и нет в первом массиве [3, 4, 5, 87, 216, 9, 25, 126]
