【问题标题】:Need help creating method to return position of a number in an integer需要帮助创建方法以返回整数中数字的位置
【发布时间】:2013-03-29 01:15:55
【问题描述】:

我正在开发一款名为“奶牛与公牛”的游戏。基本上,这是一个猜数字游戏,玩家一选择一个随机的、不同的 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)
        {

        }




}

【问题讨论】:

    标签: java indexing


    【解决方案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
     }
    

    【讨论】:

      【解决方案2】:

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

      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));
          }
      }
      

      Run this code on ideone.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-12
        • 1970-01-01
        相关资源
        最近更新 更多