我不确定是否有人熟悉游戏奶牛和公牛。基本上我正在尝试编写一个方法,用户输入的数量为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 :(得分: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;
}
答案 1 :(得分: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 };
}