奶牛和公牛的方法

时间:2014-11-06 23:14:38

标签: java methods

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

2 个答案:

答案 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 };
}