2

我正在开发一款名为“奶牛与公牛”的游戏。基本上,这是一个数字猜谜游戏,玩家一选择一个随机的、不同的 4 位数字,玩家二尝试猜测该数字。

例如,

-玩家一选择随机数:1465 -玩家二猜数字:6432。由于玩家二猜的数字有一个共同的数字(6),所以这个数字有一个“牛”。“牛”是指玩家二猜的数字与玩家一选的随机数共享一个共同的数字,但它不在同一个地方(6 是玩家 2 号码中的第一个数字,而它是玩家 1 号码中的第三个数字.)

- 如果玩家二猜数字:1466,则有 1 个“牛”和 3 个“公牛”。“公牛”是指玩家 2 猜测的数字与玩家 1 的数字相同,并且位于同一位置。

我的问题是,我需要创建一个返回整数中数字位置的方法。

例如,如果我有一个整数“1456”,我需要一个方法来告诉我任何给定数字的位置(从右边开始)。所以如果我想知道数字“5”在哪里,它会告诉我“2”,因为它在右边第二个。如果我想知道“1”在哪里,它会告诉我“4”,因为它是右数第四个。

不能使用任何内置的 java 字符串方法。

以下是我到目前为止所写的内容,因为我仍在努力,所以根本没有组织。

此方法必须调用方法“numDigits”和“getDigit”,这就是我将它们留在代码中的原因。“numDigits”返回数字中的位数。“getDigit”返回特定位置的数字。因此,如果我有一个数字“12345”,如果我输入“4”,getDigit 将返回“2”,因为“2”是数字中右数第四个。

你可以看到我在代码底部开始了“indexOf”。

抱歉,如果我不够清楚,我是 Java 新手,所以我不知道解释一切的最佳方式。

package pa3;
import java.util.*;
import java.util.Scanner;

public class CowsAndBulls {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //System.out.println("Welcome to Cows and Bulls Game. I picked a random 4-digit number with distinct integers, try finding it. Type your guess, must be a 4-digit number with distinct digits.");
        //System.out.println(numDigits(12346));
        System.out.println(getDigit(12345, 5));
        System.out.println(hasDistinctDigits(1234));
    }
    public static int numDigits(int number)
    {
        {

            int counter = 0;

            while(number > 0)
            {
            number = number/10;
            counter++;
            }

            return counter;
            }
    }


        public static int getDigit(int number, int i)
        {
            {
                int digit = 0;

                if (i <= numDigits(number))
                {
                    while (i > 0)
                    {
                         digit = number % 10;
                        number = number / 10;
                            i--;
                    }
                }
                return digit; }
        }






        public static boolean hasDistinctDigits(int number)
        {
            if(getDigit(number, 1) != getDigit(number, 2) &&
              getDigit(number, 1) != getDigit(number, 3) &&
              getDigit(number, 1) != getDigit(number, 4) &&
              getDigit(number, 2) != getDigit(number, 3) &&
              getDigit(number, 2) != getDigit(number, 4) &&
              getDigit(number, 3) != getDigit(number, 4))
              {
                  return true;
              }
              else return false;

            }

        public static int generateSecretNumber()
        {
            Random r = new Random();
            int randNum = r.nextInt(9999);

            while (hasDistinctDigits(randNum) = true)
                {       
                        randNum = r.nextInt();  
                        return randNum;

                }

        }
        public static void indexOf(int number, int digit)
        {

        }




}
4

2 回答 2

1

如果我理解正确,您可以使用您的两种方法并遍历数字:

 public static int indexOf(int number, int digit)
 {
    int count = numDigits(number);
    for(int i = 1; i <= count; i++)
    {
        if(digit == getDigit(number, i))
            return i;
    }
    return -1;  //the digit was not found
 }
于 2013-03-29T01:32:02.423 回答
0

将输入视为字符串,而不是数字/整数。

import java.util.*;
import java.lang.*;

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String player1 = "1465"; // solution
        String player2 = "6431"; // guess

        Integer cows = 0, bulls = 0, k;

        for (int i = 0, j = player2.length(); i < j; i++)
        {
            Character ch = player2.charAt(i);
            String s = ch.toString();

            if (player1.length() > i && player1.charAt(i) == ch) {
                bulls++;
            }
            else if (0 <= (k = player1.indexOf(s))) {
                cows++;
            }
        }

        System.out.println("BULLS: " + Integer.toString(bulls));
        System.out.println("COWS:  " + Integer.toString(cows));
    }
}

在 ideone.com 上运行此代码

于 2013-03-29T01:50:41.313 回答