помогите, вопрос простой, но я запутался. я создал два массива, которые сам же прописываю с клавиатуры, мне надо найти одинаковые элементы этих массивов, и вывести их допустим в третий массив
public class Main {
protected static int[] number1;
protected static int[] number2;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("количество массива");
int size = input.nextInt();
number1 = new int[size];
System.out.println("ввести элементы массива");
for (int i = 0; i < size; i++) {
number1[i] = input.nextInt();
}
System.out.print("Сам массив: ");
for (int i = 0; i < size; i++) {
System.out.print(number1[i] + " ");
}
System.out.println();
System.out.println("заполним второй массив ");
number2 = new int[size];
for (int i = 0; i < size; i++) {
number2[i] = input.nextInt();
}
System.out.print("Сам массив: ");
for (int i = 0; i < size; i++) {
System.out.print(number2[i] + " ");
}
//тут я должен начать их сравнивать, но из-за множества новой информации, с таким вроде бы простым вопросом, я через гугл не разобрался
}
}
Здесь все очень просто. Сначала вы должны выбрать любой массив (например, number1), по которому поочередно будете сравнивать со всеми элементами второго массива, если вы найдете совпадение, то вложенный цикл отменяем командой break(). Вообще это общий случай, который не оптимизирован: если у вас допустим в number1 будут одинаковые элементы, то вы все равно будете сравнивать элементы другого массива.
for (int i = 0; i < number1.length; i++)
{
int a = number[i];
for (int j = 0; j < number2.length; j++)
{
if (a == number2[j])
{
System.out.println(a);
break();
}
}
}
Ну, или не изобретать велосипед и воспользоваться java.util.Array.equals(number1, number2)
Как вариант решения:
int[] numberEq = null;
for (int n : number1) {
if (Arrays.asList(number2).contains(n)) {
if (numberEq == null) {
numberEq = new int[1];
numberEq[0] = n;
} else {
numberEq = Arrays.copyOf(numberEq, numberEq.length + 1);
numberEq[numberEq.length - 1] = n;
}
}
}
Если нужно именно через массивы, но это топорно не спорю.
public static int[] sameNumbersInArrays(int[] number1,int[] number2) {
int[] number3 = new int[number1.length];
int count = 0;
for (int i = 0; i < number1.length ; i++) {
if(number1[i] == number2[i]) {
number3[count] = number1[i];
count++;
}
}
int[] number4 = new int[count];
System.arraycopy(number3,0,number4, 0, count);
return number4;
}
Воспользуемся "резиновым" массивом ArrayList<T>
, где T
- тип элементов, который хранит массив. Пусть arr
- переменная типа ArrayList<Integer>
. Отмечу, что в угловых скобках не могут быть примитивные типы - только ссылочные. int
заменяется на Integer
, double
- на Double
, long
- на Long
и т. д. (напоминаю, что регистр имеет значение). Этими типами можно работать как с обычными переменными.
Для нашего массива будут справедливы следующие утверждения:
arr.add(a)
- добавляет в конец массива элемент a
. Он должен конвертироваться в тип T
. В нашем случае - в Integer
. int
в Integer
легко преобразуется
arr.contains(a)
- проверяет, есть ли элемент a
в нашем массиве. Если это так, получаем true
, в ином случае - false
arr.sort(null)
- сортирует элементы массива по возрастанию. Или по другому правилу, если его указать вместо null
Таким образом, данная задача решается таким образом:
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int i: number1)
//начинаем перебирать элементы первого массива
for(int j: number2)
//начинаем перебирать элементы второго массива
if(!arr.contains(i) && i == j)
arr.add(i);
//если элементы совпадают, записываем его в наш массив, если его там ещё нет
arr.sort(null);
//сортируем общие элементы. Для удобства
System.out.println("Общие элементы");
for(int i: arr) System.out.print(i + " ");
P. S. На самом деле ArrayList не массив, а список.
Виртуальный выделенный сервер (VDS) становится отличным выбором