Java数组:在一组10个输入数字中查找唯一数字

时间:2013-09-19 02:04:04

标签: java arrays

我在这里不知所措。

我有这个家庭作业,我必须让用户输入10个数字,将它们放在一个数组中,并找出哪些输入的数字是唯一的。

这是我现在的工作流程:输入数字>如果之前没有输入数字,则存储在数组中;如果之前输入了数字,请忽略>显示输入的数字>显示唯一编号

例如:输入1 2 3 5 1 2 4 6会找到唯一的数字并显示“1 2 3 4 5 6”

到目前为止,我的代码看起来像这样:

public class HwChapter6 {
    public static void main(String[] args) {
        java.util.Scanner input = new java.util.Scanner(System.in);

        int[] count = new int[10];
        int number = 0;
        int x = 0;
        boolean unique = false;
        int length = count.length;
        System.out.println("Insert 10 single digit numbers in any order your heart desires:");
        for (int i = 0; i < count.length; i++) {
            count[i] = input.nextInt();
            number = count[i];
            for (int j = 0; j < count.length; j++) {

感谢帮助人员。

4 个答案:

答案 0 :(得分:2)

而不是输入值数组,将它们放在Set Integers中。根据定义,设置仅存储唯一值。如果添加3'foos',则集合中只有一个'foo'。

// 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();

答案 1 :(得分:1)

将所有数字存储在数组中。 对于每个存储的数字:检查之前是否插入了数字并将其保存在布尔数组中。 打印所有未在布尔数组中标记的数字。

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])+" ");
    }
}

答案 2 :(得分:1)

检查输入的数字,然后通过在{(1}}的第二个(布尔)数组中标记相同的位置(如果它们是唯一的)来跟踪哪些是唯一的,否则true。 / p>

然后,当您打印出唯一值时,如果false中的该位置包含numbers[],则只打印uniques[]中每个位置的值。

true

答案 3 :(得分:0)

最快,最简洁,最有效的方法是在完成所有其他操作后,使用第一个数字作为魔术值破坏性地解析数组的唯一值:

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");

是的,我有两个答案 - 这个答案与另一个答案明显不同,并且更好,尽管初学者理解起来要困难得多。但是,这两种解决方案都是有效的。