0

我已经为此编写了代码,但是没有用。如果它成功了,运行时复杂度将会非常高。

for (int collumnInput=0; collumnInput < 3; collumnInput++)
        {
            for (int rowInput = 0; rowInput < 3; rowInput++)
            {
                try
                {
                    puzzleArray[collumnInput][rowInput] = scan.nextInt();

                    if ((puzzleArray[collumnInput][rowInput] > 8) || (puzzleArray[collumnInput][rowInput] < 0))
                    {
                        System.out.println("Invalid 8-puzzle entered!");
                        System.exit(0);
                    }
                    for (int collumnCheck = 0; collumnCheck < collumnInput; collumnCheck++)//code to check for duplicates starts here.
                    {
                        for (int rowCheck = 0; rowCheck < rowInput; rowCheck++)
                        {
                            if (puzzleArray[collumnCheck][rowCheck]==puzzleArray[collumnInput][rowInput])
                            {
                                System.out.println("Invalid 8-puzzle entered!");
                                System.exit(0);
                            }
                        }
                    }

                }
                catch (java.util.InputMismatchException exception)
                {
                    System.out.println("Invalid 8-puzzle entered!");
                    System.exit(0);
                }

            }
        }
        scan.close();

首先,这里的代码运行,但没有检测到数组中的重复项,那么我该如何解决呢?第二件事是,有没有一种资源效率更高的方法来做到这一点?我见过人们使用克隆和复制方法,但我不知道这些方法实际上是否更节省资源。谢谢。

4

1 回答 1

2

要回答标题中的问题,我会用一行来回答:

Integer[] array; // given this type of array
boolean hasRepeats = new HashSet<Integer>(Arrays.asList(array)).size() != array.length;
于 2014-09-30T02:39:46.873 回答