2

「Cows and Bulls」というゲームに取り組んでいます。基本的に、これは数字当てゲームで、プレイヤー 1 がランダムで明確な 4 桁の数字を選び、プレイヤー 2 がその数字を当てようとします。

例えば、

- プレーヤー 1 は乱数を選びます: 1465 - プレーヤー 2 は番号を推測します: 6432. プレーヤー 2 が推測する番号は共通の番号 (6) を共有するため、この番号には 1 つの「牛」があります。「Cow」とは、プレーヤー 2 が推測した数字が、プレーヤー 1 が選んだ乱数と共通の数字を共有しているが、同じ場所にない場合です (6 はプレーヤー 2 の数字の最初の数字であり、プレーヤー 1 の数字の 3 番目の数字です)。 .)

-プレイヤー2が1466を当てた場合、1つの「牛」と3つの「雄牛」があります。「雄牛」とは、プレーヤー 2 が推測した数字がプレーヤー 1 のものと共通の数字を共有し、かつそれが同じ場所にある場合です。

私の問題は、数値の位置を整数で返すメソッドを作成する必要があることです。

たとえば、整数 "1456" がある場合、特定の数値が (右から) どの位置にあるかを示すメソッドが必要です。したがって、数字の「5」がどこにあるか知りたい場合は、右から 2 番目なので「2」と表示されます。「1」がどこにあるか知りたい場合は、右から 4 番目なので「4」と表示されます。

組み込みの Java 文字列メソッドを使用できません。

以下は私がこれまでに書いたものです。まだ作業中のため、まったく整理されていません。

このメソッドは、メソッド「numDigits」と「getDigit」を呼び出す必要があるため、コードに残しました。「numDigits」は数値の桁数を返します。「getDigit」は、特定の位置にある数字を返します。したがって、「12345」という数字がある場合、「2」は数字の右から 4 番目なので、「4」と入力すると getDigit は「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

私があなたを正しく理解していれば、2つの方法を使用して数字を繰り返すことができます:

 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 に答える