Print only those numbers that are double of another number in the array in Java

Use a HashSet<Integer> to store double the value of each element:

Set<Integer> setOfArray = new HashSet<>();
for (int a : array) setOfArray.add(2 * a);

Then loop through the array again, looking for matching elements:

for (int a : array) {
  if (setOfArray.contains(a)) {
    System.out.println(a);
  }
}

Or

IntStream.of(array).boxed().filter(setOfArray::contains)
    .forEach(System.out::println);

This is a simple task: first, for each number n, store 2n in a set. Then, iterate through the numbers and check which of them is in the set.

import java.util.*;

public class DoubleNums {
    public static void main(String[] args) {
        int[] numbers = new int[]{2, 3, 9, 12, 7, 18};   //original array

        HashSet<Integer> h = new HashSet<Integer>();     //set

        for(int i = 0; i < numbers.length; i++) h.add(numbers[i] * 2);
        for(int i = 0; i < numbers.length; i++){
            if(h.contains(numbers[i])) System.out.println(numbers[i]);
        }
    }
}

Complexity: O(n)

A HashSet<Integer> works like a simple set, but faster, because it uses properties of hash tables to add and find elements.


I saw that you asked for a solution that started with your own code...

I know it's faster but I assumed that we can find a solution using my code with some minor changes.

So I tried to understand what you were trying to do and I have not been able to decipher your method so starting from your macro I created a clearer version.


Changes

  • I used an ArrayList (list) as support instead of your array (even). The List is very convenient in your case because it has the contains() function and also its size is variable.
  • I took an even number in the array and looked for if there was at least one "half" of it.

Code

public static void main(String[] args) {
    Random random = new Random();

    int[] array = new int[20];
    ArrayList<Integer> list = new ArrayList<>();
    int evenNumber = 0;

    for (int i = 0; i < array.length; i++) {
        array[i] = random.nextInt(100);
    }

    System.out.println(Arrays.toString(array));

    for (int i = 0; i < array.length; i++) {
        // If I found an even number and this is NOT already in the list then I'll study it
        if (array[i] % 2 == 0 && !list.contains(array[i])) {
            evenNumber = array[i];
            for (int j = 0; j < array.length; j++) {
                // I add "evenNumber" to the list only if at least one its "half" exist in the array
                if (array[j] * 2 == evenNumber) {
                    list.add(evenNumber);
                    // I dont need to search more, I already found its "half"!
                    break;
                }
            }
        }
    }

    System.out.println("Doubled nums: " + list);
}

Sample output

[71, 88, 45, 97, 64, 31, 54, 12, 14, 86, 22, 42, 35, 44, 70, 65, 93, 85, 99, 14]
Doubled nums: [88, 44, 70]