寻找唯一性(重复)

时间:2016-02-20 00:26:57

标签: java unique

我的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; } } 方法遇到问题。要么是我犯了逻辑错误,要么是语法错误,或两者兼而有之。我必须确保我得到的每个用户输入都是唯一的。我所做的其他一切都是正确的,但这种方法。我正在使用调试器,我注意到“数字”不会随着用户输入的变化而改变,但我是新的,有点丢失。 Assigment:输入5个数字并测试有效性和唯一性。如果无效则不计入5个数字。如果不是唯一计数5个数字但计算唯一数量并打印“不唯一”,如果不是唯一的。

set(EXECUTABLE_NAME ball_popping)
set(LIBRARY_NAME ball_popping_lib)

add_library(${LIBRARY_NAME} STATIC ball_popping.cpp ${INCLUDE_FILES})
add_executable(${EXECUTABLE_NAME} game.cpp)
target_link_libraries(${LIBRARY_NAME} ${Precompiled_LIBRARIES})          
target_link_libraries(${EXECUTABLE_NAME} ${LIBRARY_NAME})

2 个答案:

答案 0 :(得分:0)

我注意到的一些事情:

 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;
}

因为其余的仍然是空的

答案 1 :(得分:0)

错误位于方法for的{​​{1}}中,在第一次迭代期间,您将给定数字与第一个值进行比较,如果它们不匹配,则您已经返回true,因此循环可以'检查剩余的任何数字。

只需删除isUnique中的else parte,然后将循环中的最后if更改为true而不是false。

这种方式只有在您检查完整个数组之后,您才能确定该数字是唯一的。

我也会把你发送给那个methis return,所以你不要检查整个数组,只检查已注册的数量。