【问题标题】:Finding Uniqueness (duplicates)寻找唯一性(重复)
【发布时间】:2016-02-20 00:26:57
【问题描述】:

我的isUnique 方法有问题。要么我犯了逻辑错误,要么犯了语法错误,或者两者兼而有之。我必须确保我得到的每个用户输入都是唯一的。我所做的其他一切都是正确的,但那个方法。我正在使用调试器,我注意到“数字”不会随着用户输入的变化而改变,但我是新手,有点迷路了。分配:输入 5 个数字并测试有效性和唯一性。如果无效,则不计入 5 个数字。如果不是唯一的,则计入 5 个数字,但计算唯一的数量,如果不是唯一的,则打印“不唯一”。

import java.util.Scanner;

public class Assignment4Part2 {

    public static void main(String[] args) {

        int[] numbers = new int[5];

        System.out.println("Enter an integer (50-100): ");
        Scanner input = new Scanner(System.in);

        int uniqueCount = 0;

        for (int i = 0; i < numbers.length;) {

            {
                numbers[i] = input.nextInt();
                if (isValid(numbers[i]) == true) {
                    i++;

                    if (isUnique(numbers, numbers[i]) == true) {
                        uniqueCount++;
                        System.out.printf("Unique so far: %d ", uniqueCount);

                    }
                    if (isUnique(numbers, numbers[i]) == false) {
                        System.out.println("That's not unique.\n");
                    }
                }

            }
        }

        for (int i = 0; i < numbers.length; i++)

        {
            System.out.print(numbers[i] + " ");
        }
    }

    public static boolean isValid(int array) {

        if (array <= 100 & array >= 50) {
            return true;
        } else {
            System.out.println(" ***Invalid Number\n");
            return false;
        }

    }

    public static boolean isUnique(int[] array, int numbers) {

        for (int i = 0; i < array.length; i++) {
            if (array[i] == numbers) {
                return false;
            } else {
                return true;
            }
        }
        return false;
    }
}

【问题讨论】:

  • 您需要输入 5 个唯一的数字吗?

标签: java unique


【解决方案1】:

我注意到的一些事情:

 for (int i = 0; i < numbers.length;) {

        {
            numbers[i] = input.nextInt();
            if (isValid(numbers[i]) == true) {
                //i++; // in case you increment here, you do it before is unqique is true... so next isUnique is of an emtpy (null) numbers[i]

                if (isUnique(numbers, numbers[i]) == true) {
                    uniqueCount++;
                    System.out.printf("Unique so far: %d ", uniqueCount);
                    //continue here
                    i++;

                }// why not an else?
                //if (isUnique(numbers, numbers[i]) == false) {
                else {
                    System.out.println("That's not unique.\n");


                }
            }

        }
    }

而且是独一无二的......

public static boolean isUnique(int[] array, int numbers) {
   // here the given number is already in the array, so never unique....
   // this will always return false, because the input is already in the array

    for (int i = 0; i < array.length; i++) {
        if (array[i] == numbers) {
            return false;
        } else {
            return true;
        }
    }
    return false;
}

所以使用:

 for (int i = 0; i < numbers.length;) {

        {
            // use a temp value before putting it in the array
            int input = input.nextInt();
            if (isValid(input) == true) {
                //i++; // in case you increment here, you do it before is unqique is true... so next isUnique is of an emtpy (null) numbers[i]

                if (isUnique(numbers, input) == true) {
                    uniqueCount++;
                    numbers[i] = input
                    System.out.printf("Unique so far: %d ", uniqueCount);
                    //continue here
                    i++;

                }// why not an else?
                //if (isUnique(numbers, numbers[i]) == false) {
                else {
                    System.out.println("That's not unique.\n");


                }
            }

        }
    }

而且是独一无二的功能......

if (array[i] == numbers) {

虽然不是所有的数字都被填满了......这比较:

if(null == numbers){

所以加在前面会更短:

if(array[i]==null){
     break;
}

因为剩下的还是空的

【讨论】:

    【解决方案2】:

    错误在您的方法isUnique 中的for 中,在第一次迭代期间,您将给定的数字与第一个值进行比较,如果它们不匹配,您已经返回 true,因此循环无法检查任何剩下的数字。

    只需删除if 中的else 部分,并将循环中的最后一个return 更改为true 而不是false。

    只有在你检查了整个数组之前,你才能确定这个数字是唯一的。

    我还建议你发送给那个 methis uniqueCount,这样你就不用检查整个数组,而只检查已经注册的号码数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-05
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多