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

まず第一に、ここのコードは実行されますが、配列内の重複を検出しないので、どうすれば修正できますか? 2 つ目は、これを行うためのよりリソース効率の良い方法はないかということです。人々がクローンとコピーの方法を使用しているのを見てきましたが、それらが実際にリソース効率が高いかどうかはわかりません。ありがとう。

4

1 に答える 1

2

タイトルの質問に答えるには、1 行で答えます。

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