Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 公牛和奶牛比赛?_Java_Reverse Engineering - Fatal编程技术网

Java 公牛和奶牛比赛?

Java 公牛和奶牛比赛?,java,reverse-engineering,Java,Reverse Engineering,对于那些不熟悉的人来说,该游戏是一个数字猜测游戏,其中选择了一个数字(非重复;例如,不选择1223),用户进行猜测并获取信息,确定数字和数字是否正确,数字是否正确但数字不正确,或者数字是否未包含在内 (例如,选择的数字=>1234,猜测3789将得到1头牛) 我不想让电脑选择号码,告诉属性和玩家的猜测,我想做相反的事情;我输入一个数字和属性-计算机给出一个可能的数字列表 无论如何,我的方法是: 将所有不重复的数字添加到arraylist中 删除不满足条件的数字 以下是如何处理cow案例:

对于那些不熟悉的人来说,该游戏是一个数字猜测游戏,其中选择了一个数字(非重复;例如,不选择1223),用户进行猜测并获取信息,确定数字和数字是否正确,数字是否正确但数字不正确,或者数字是否未包含在内

(例如,选择的数字=>1234,猜测3789将得到1头牛)

我不想让电脑选择号码,告诉属性和玩家的猜测,我想做相反的事情;我输入一个数字和属性-计算机给出一个可能的数字列表

无论如何,我的方法是:

  • 将所有不重复的数字添加到arraylist中
  • 删除不满足条件的数字
  • 以下是如何处理cow案例:

         //Case 5: property is 4 cows;
         if (property.equals("040")) {
            //delete if numbers don't appear EXACTLY 4 times
            if (contains != 4) { numbers.remove(i); }
    
            //removes if the digits of the number tried corresponds with the actual number (Cow!)
            else if (n.charAt(0) == first.charAt(0)) { numbers.remove(i); }
            else if (n.charAt(1) == second.charAt(0)) { numbers.remove(i); }
            else if (n.charAt(2) == third.charAt(0)) { numbers.remove(i); }
            else if (n.charAt(3) == fourth.charAt(0)) { numbers.remove(i); }
         }
    
    它对奶牛有效。在尝试实施多头策略时,使用这种方法似乎是不可能的我如何为公牛队做一个方法!?我是否需要再创建四个ArrayList并为每个案例进行计算?还是ArrayList不是一个好办法?

    例如,1234和1bull表示要猜测的数字是1xx、X2XX、XX3X或XXX4,但 我不能使用这种方法,因为它将删除除输入之外的所有数字


    谢谢。

    你可以试试这个算法来解决这个问题-

    String userAnswer = // ... getUserAnswer();        
    if(userAnswer == null || userAnswer.equals("")
            || !userAnswer.matches("^-?\\d+$") 
                || userAnswer.split("(?<=\\G.{1})").length < 4) {
        // error    
    }                
    
    int[] secret = (int[])// ... getSecret(request);        
    int[] seq = {1,2,3,4};
    
    for(int i = 0; i < userAnswer.split("(?<=\\G.{1})").length; i++) {
        seq[i] = Integer.parseInt(s[i]);
    }
    
    int bullCount = 0;
    int cowCount = 0;
    
    for(int i = -1; ++i < secret.length;) {
      if(secret[i] == seq[i]) {
        bullCount++;
      }
    }
    
    for(int i = -1; ++i < secret.length;) {
      for(int j = -1; ++j < secret.length;) {
        if(secret[i] == seq[j] && i != j) {
          cowCount++;
        }
      }
    }
    
    String snswer = bullCount + "b" + cowCount +  "c";            
    if(Arrays.equals(secret, seq))
     // win! 
    else
    // fail!
    
    String userAnswer=/。。。getUserAnswer();
    如果(userAnswer==null | | userAnswer.equals(“”)
    ||!userAnswer.matches(“^-?\\d+$”)
    
    ||userAnswer.split((?这是错误的,好像代码是1634,用户输入6113,程序返回4头奶牛,而实际上有3头奶牛。

    尝试以下操作:

        private static String findNumberOfCowsAndBulls(String firstString, String secondString) {
    
        if(firstString.equals(secondString))
            return "All Bulls:" + firstString.length();
    
        char[] fSArr = firstString.toCharArray();
        char[] sSArr = secondString.toCharArray();
        int countCow = 0;
        int countBull = 0;
        Map<String, Integer> fSMap = new HashMap<>();
        Map<String, Integer> sSMap = new HashMap<>();
    
        for (int i = 0; i < fSArr.length; i++) {
            if(i < sSArr.length){
                if(fSArr[i] == sSArr[i]){
                    countBull++;
                }
                else{
                    updateMapOfCharsCount(fSMap, fSArr[i]);
                    updateMapOfCharsCount(sSMap, sSArr[i]);
                }
            }
            else{  //fSArr is bigger than sSArr
                updateMapOfCharsCount(fSMap, fSArr[i]);
            }
        }
    
        if(fSArr.length < sSArr.length){  //fSArr is shorter than sSArr
            for(int i = fSArr.length; i < sSArr.length - fSArr.length; i++){
                updateMapOfCharsCount(sSMap, sSArr[i]);
            }
        }
    
        for (Map.Entry<String, Integer> entry : fSMap.entrySet()) {
            String key = entry.getKey();
            if(sSMap.containsKey(key)){
                if(sSMap.get(key) <= fSMap.get(key))
                    countCow = countCow + sSMap.get(key);
                else
                    countCow = countCow + fSMap.get(key);
            }
        }
    
        return "countCow = " + countCow + " countBull = " + countBull;
    }
    
    private static void updateMapOfCharsCount(Map<String, Integer> fsMap, char c) {
        String key1 = String.valueOf(c);
        if (fsMap.containsKey(key1)) {
            fsMap.put(key1, fsMap.get(key1) + 1);
        } else
            fsMap.put(key1, 1);
    }
    
    private static String findNumberOfCowsAndBulls(stringfirststring,stringsecondstring){
    if(第一个字符串等于(第二个字符串))
    返回“All Bulls:+firstString.length();
    char[]fSArr=firstString.toCharArray();
    char[]sSArr=secondString.toCharArray();
    int countCow=0;
    int countBull=0;
    Map fSMap=新的HashMap();
    Map sSMap=newhashmap();
    对于(int i=0;i