2014-11-06 93 views
0

我不確定是否有人熟悉遊戲中的牛和公牛。基本上我試圖編寫一個方法,用戶輸入1234的數字,另一個用戶輸入4305,這會給他們2頭牛,因爲這些數字在第一個數字中,但是在錯誤的索引中。如果他們在相同的指數,那麼他們會得到一頭牛。我必須調用我以前編寫的方法。我已經把它計算在第一個給定的數字中找到的正確數字的數量,但我無法弄清楚如果它們在同一個索引中不會計算它們。任何建議都會很棒。奶牛和公牛的方法

public static int numDigits(int number) 
{ 
    int counter = 0; 
    while(number !=0) 
    { 
     int digit = number % 10; 
     number= number /10; 
     counter++; 
    } 
    return counter; 
} 

public static int getDigit(int number, int i) 
{ 
    int negative =-1; 
    int counter = 0; 
    int digit = 0; 
    if(i>numDigits(number)|| i == 0) 
    { 

     return negative; 
    } 
     while(counter < i) 
     { 
     digit = number % 10; 
     number = number/10; 
     counter++; 

     } 

    return digit; 
} 
public static int indexOf (int number, int digit) 
{ 
    int counter = 0; 
    int negative = -1; 
    for(int i = 0; i<=numDigits(number); i++) 
    { 
     counter++; 
     if(getDigit(number,i)== digit) 
     { 
      return counter-1; 
     } 
    } 
    return negative; 
} 
public static int getCows(int first, int second) 
{ 
    int counter = 0; 
    for(int i = 0; i<numDigits(first); i++) 
    { 
     if(getDigit(first,i)==getDigit(second,i)) 
     { 
      counter++; 
     } 
    } 
    return counter; 
} 
+0

對於這裏看起來的樣子,我感到抱歉。如果有人願意編輯,我會遇到問題。 – 2014-11-06 23:15:44

回答

0

你在問怎麼不把牛看作是牛?

public static int getCows(int first, int second) 
{ 
    int counter = 0; 
    for(int i = 0; i<numDigits(first); i++) 
    { 
     for(int j = 0; i<numDigits(second); j++) 
     { 
      if(j!=i && getDigit(first,i)==getDigit(second,j)) 
      { 
       counter++; 
      } 
     } 
    } 
    return counter; 
} 
+0

是的,我必須在這個之後編寫一個方法來只計算多頭,但我想如果我能理解如何完成這個完成,那麼我可以做牛的方法。 – 2014-11-06 23:37:18

+0

我很抱歉,但我不明白你在這裏做什麼。爲什麼if語句結尾的&&? – 2014-11-06 23:47:19

+0

這個答案的問題(除了那個奇怪的'&&'),如果兩頭奶牛的數字相同,它會計數兩次。例如,'1123'與'4511'相比,會顯示4頭牛,而不是隻有2頭。 – 2014-11-06 23:53:40

0

爲了好玩(在groovy控制檯中運行,可能不是完全有效的java),將它們放在一起。

public static int[] getCowsBulls(int match, int guess) 
{ 
    Character[] matchChars = Integer.toString(match).getChars();  
    Character[] guessChars = Integer.toString(guess).getChars();   
    int minLen = Math.min(matchChars.length, guessChars.length); 

    Set<Character> matchSet = new HashSet<>(); 
    matchSet.addAll(matchChars); 

    int cows = 0; 
    int bulls = 0; 

    for(int i = 0; i < minLen; i++) { 
     Character gc = guessChars[i]; 
     boolean inMatch = matchSet.contains(gc); 
     if(!inMatch) { continue; } 
     if(matchChars[i].equals(gc)) { 
      bulls++; 
     } else { 
      cows++; 
     } 
    } 
    return new Integer[]{ cows, bulls }; 
}