Java Arrays: Finding Unique Numbers In A Group of 10 Inputted Numbers

前端 未结 4 1765
离开以前
离开以前 2021-01-16 05:07

I\'m at a loss here.

I have this homework assignment where I have to enable the user to input 10 numbers, place them in an array, and figure out which inputted numbe

相关标签:
4条回答
  • 2021-01-16 05:41

    Store all numbers in an array. For each stored number: check if number was inserted before and save that in a boolean array. Print all numbers that are not marked in the boolean array.

    java.util.Scanner input = new java.util.Scanner(System.in);
    
    int[] numbers = new int[10];
    boolean[] usedBefore = new boolean[10];
    
    // Insert all numbers
    for (int i = 0; i < numbers.length; i++) {
        // Read number from console
        numbers[i] = input.nextInt();
    
        // Check if number was inserted before
        usedBefore[i] = false;
        for(int k = 0; k < i; k++) {
            if(numbers[k] == numbers[i]) {
                usedBefore[i] = true;
                break;
            }
        }
    }
    
    // Print all numbers that were not inserted before
    for(int j = 0; j < numbers.length; j++) {
        if(!usedBefore[i]) {
            System.out.print(String.valueOf(numbers[j])+" ");
        }
    }
    
    0 讨论(0)
  • 2021-01-16 05:44

    Check the numbers at they are entered, then keep track of which ones are unique by marking the same positions in a second (boolean) array with true if they are unique and false otherwise.

    Then, when you print out the unique values, only print the value from each position in numbers[] if that position in uniques[] contains true.

    Scanner input = new Scanner(System.in);
    int[] numbers = new int[10];
    boolean[] uniques = new boolean[10];
    
    for(int i = 0; i < 10; i++) {
        System.out.println("Please enter a value: \n" + "[" + (i + 1) + "]: ");
        numbers[i] = input.nextInt();
        uniques[i] = true;
        for(int j = 0; j < 10; j++) {
            if(numbers[i] == numbers[j] && i != j) {
                uniques[i] = false;
            }
        }
    }
    
    System.out.println("\nThe numbers you entered were: \n");
    for(int i = 0; i < 10; i++) {
        System.out.println(numbers[i] + ", ");
    }
    System.out.println("done.\n\n");
    
    System.out.println("\nThe uniqe numbers you entered were: \n");
    for(int i = 0; i < 10; i++) {
        if(uniques[i]) {
            System.out.println(numbers[i] + ", ");
        }
    }
    System.out.println("done.\n\n");
    
    0 讨论(0)
  • 2021-01-16 05:44

    Instead of an array of input values, put them in a Set of Integers. Sets, by definition, store only unique values. If you add 3 'foos', there will be only one 'foo' in the set.

    // Add this to your top-level loop
    Set<Integer> uniqueValues = new TreeSet<Integer>;
    uniqueValues.add(number);
    
    // Add this after the loop to write all unique values on one line
    for (Integer value : uniqueValues) {
      System.out.print(value.toString() + " ");
    }
    
    // Now end the line.
    System.out.println();
    
    0 讨论(0)
  • 2021-01-16 05:47

    The fastest and most concise and efficient way is to destructively parse the array for uniques using its first number as a magic value, after all other operations on it are complete:

    Scanner input = new Scanner(System.in);
    int magic = 0;
    int[] numbers = new int[10];
    
    for(int i = 0; i < 10; i++) {
        System.out.println("Please enter a value: \n" + "[" + (i + 1) + "]: ");
        numbers[i] = input.nextInt();
    }
    
    System.out.println("\nThe numbers you entered were: \n");
    for(int i = 0; i < 10; i++) {
        System.out.println(numbers[i] + ", ");
    }
    System.out.println("done.\n\n");
    
    System.out.println("The unique numbers are: ");
    magic = numbers[0];
    System.out.println(magic + ", ");
    for(int i = 0; i < 10; i++) {
        for(int j = 0; j < 10; j++) {
            if(numbers[i] == numbers[j] && j != i) {
                numbers[j] = magic;
            }
        }
        if(numbers[i] != magic) {
            System.out.println(numbers[i] + ", ");
        }
    }
    System.out.println("done.\n\n");
    

    Yes, I have two answers - this one is significantly different from the other one, and is better, though it is much more difficult for beginners to understand. Both solutions are valid, however.

    0 讨论(0)
提交回复
热议问题