2014-09-30 34 views
0

我已經爲此編寫了代碼,但沒有奏效。如果它能夠工作,運行時間的複雜性會非常高。如何讓我的代碼找到一個數字是否在Java中的數組中重複?

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

要回答標題中的問題,我會做一個行:

Integer[] array; // given this type of array 
boolean hasRepeats = new HashSet<Integer>(Arrays.asList(array)).size() != array.length; 
+0

對不起沒有你的意思是HashMap的? – 2014-09-30 02:43:15

+1

@KickButtowski [HashSet](http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html)是正確的 – 2014-09-30 02:43:37

+1

@PhamTrung如果你聲稱有什麼,請提供一些解釋,如果你是能夠:) – 2014-09-30 02:44:46

相關問題