2014-11-06 70 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 }; 
}