字符串 - 数字猜谜游戏

时间:2014-01-18 02:03:53

标签: java string

这是一款生成随机4位数字的游戏,然后让用户输入5次猜测游戏的机会,并返回一个提示,说明在正确的位置有多少数字以及有多少匹配但是在错误的地方。

我在比较两个字符串时遇到问题。其中一个字符串保存游戏的正确答案,另一个字符串保存最近的4位数猜测。

aCount必须是处于正确位置的字符数。

bCount必须是正确答案中的字符数,但不是正确的位置。

bCount是我遇到麻烦的部分(它没有像我期望的那样工作)。我想我可能会尝试双循环,但我不确定。

    static String getHint(String guess, String answer){
    int aCount=0;   
    int bCount=0;
    String hintString="";
    for (int i =0; i<answer.length(); i++){
        char guessAChar = guess.charAt(i);
        char ansAChar = answer.charAt(i);
        if(guessAChar == ansAChar){
            aCount++;
        }
    }

    for (int indexOfGuess = 0; indexOfGuess < answer.length(); indexOfGuess++)
      {
         for (int indexOfActualNumber = 0; indexOfActualNumber < answer.length(); indexOfActualNumber++)
         {
           if (guess.charAt(indexOfGuess) == (answer.charAt(indexOfActualNumber)))
           {
              bCount++;
           }
         }
      }
    bCount = bCount - aCount;
    hintString =("Your hint is: \n"+aCount+"A" + bCount + "B");
    return hintString;
    }
}

编辑:此问题已经解决:此方法现在搜索并输出每个字符串中匹配的数字,以及每个位置中的数字是否相同!

2 个答案:

答案 0 :(得分:0)

变量bCount是最终字符串中的数字量,但不在正确的位置。你需要一个双循环来检查每个字符串中的每个字符,看它们是否匹配。这可能会指出你正确的方向。

int outer_counter = 0;
for(char g : guess.toCharArray())
{
     int inner_counter = 0;
     for(char a : answer.toCharArray())    
      {
           if(g == a && inner_counter != outer_counter)
           {
               bCount++;
           }
           inner_counter++;
      }
      outer_counter++;
 }

计数器确保它们不在同一位置。

答案 1 :(得分:-2)

因此bCount确定答案中的位数,但不是在正确的位置。所以让我们试试这个:

public string bCount()
{
  for (int indexOfGuess = 0; indexOfGuess < answer.length(); indexOfGuess++)
  {
     for (int indexOfActualNumber = 0; indexOfActualNumber < answer.length(); indexOfActualNumber++)
     {
       if (guess.charAt(indexOfGuess).equals(answer.charAt(indexOfActualNumber))
       {
          bCount++;
       }
     }
  }
}

此方法可以:

  1. 创建一个循环遍历“guess”数组的每个索引的外部循环
  2. 创建一个内部循环,当“guess”数组在索引处时,内部循环将遍历每个索引(因此,当“guess”在索引0时,“answer”将在“guess”之前遍历所有索引“转到1,然后内循环再次运行”
  3. 检查猜测索引处的数字是否=实际索引处的数字。
  4. 如果是,请增加bCount。
  5. 我没有照顾你的唯一问题是如果输入两次号码。示例:如果数字是1900,并且您猜测1909,则bCount的数字将高于应有的数字。但是,我会把它留给你,因为这毕竟是家庭作业。