「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)
{
}
}