Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_String_Comparison - Fatal编程技术网

在Java中比较字符串数组中的这两个元素有什么错?

在Java中比较字符串数组中的这两个元素有什么错?,java,arrays,string,comparison,Java,Arrays,String,Comparison,Java新手和我被困在一些看起来非常简单的事情上。我为我正在构建的一个游戏编写了一个算法,使用TDD,我的所有测试都通过了,但实际的游戏并没有返回正确的反馈。相反,每当我猜到一个正确的字母时,它就会返回一个w,并且应该返回一个b 背景 游戏首先生成一个4个字符的随机码。游戏的目的是输入一个猜测并尝试匹配密码。反馈类应该告诉我,与代码相比,我的猜测是热的还是冷的 我把猜测和密码传给全班同学并计算反馈。猜测是一个字符串,我使用split将其转换为字符串数组。密码也是一个字符串数组,我随机为它生成4个

Java新手和我被困在一些看起来非常简单的事情上。我为我正在构建的一个游戏编写了一个算法,使用TDD,我的所有测试都通过了,但实际的游戏并没有返回正确的反馈。相反,每当我猜到一个正确的字母时,它就会返回一个w,并且应该返回一个b

背景 游戏首先生成一个4个字符的随机码。游戏的目的是输入一个猜测并尝试匹配密码。反馈类应该告诉我,与代码相比,我的猜测是热的还是冷的

我把猜测和密码传给全班同学并计算反馈。猜测是一个字符串,我使用split将其转换为字符串数组。密码也是一个字符串数组,我随机为它生成4个不同的字符串值。我试着检查guess和secret code中的一个元素是否都是字符串,并且在这两个元素上都是真的

问题 问题是,我的完全匹配if语句从未执行过。我读到你应该用equals来代替,也试过了,但是得到了一个错误

有人能帮忙吗

这是我的反馈课: 公开课反馈{

      public String[] guess;
      public String[] secretCode;
      public String[] feedback;

      public String[] get(String[] guess, String[] secretCode) {
        this.guess = Arrays.copyOf(guess, guess.length);
        this.secretCode = Arrays.copyOf(secretCode, secretCode.length);
        feedback = new String[this.secretCode.length];
        findExactMatches();
        findNearMatches();
        findNoMatches();
        sortFeedback();
        return feedback;
      }

      public void findExactMatches() {
        for (int i = 0; i < guess.length; i++) {
          if (guess[i] == secretCode[i]) {
            feedback[i] = "b";
            guess[i] = "x";
            secretCode[i] = "x";
          }
        }
      }

      public void findNearMatches() {
        for (int i = 0; i < guess.length; i++) {
          if ( Arrays.asList(secretCode).contains(guess[i]) && guess[i] != "x" ) {
            feedback[i] = "w";
            int matched_symbol_index = Arrays.asList(secretCode).indexOf(guess[i]);
            secretCode[matched_symbol_index] = "x";
          }
        }
      }

      public void findNoMatches() {
        for (int i = 0; i < guess.length; i++) {
          if ( feedback[i] == null ) {
            feedback[i] = " ";
          }
        }
      }

      public void sortFeedback() {
        Arrays.sort(feedback);
      }
    }
比较字符串时,请使用等于而不是==。String.equals将比较内容,而==将比较标识,即它们是否为同一对象

所以

应该是

guess[i].equals(secretCode[i])
如果你想了解更多,那么你可以做==如果你输入字符串。但这完全是额外的内容

编辑:另外,正如johnchen902在评论中所说:

猜猜[i]!=x应该是!猜猜[i].equalsx.在findNearMatches中

比较字符串时,请使用等于而不是==。String.equals将比较内容,而==将比较标识,即它们是否为同一对象

所以

应该是

guess[i].equals(secretCode[i])
如果你想了解更多,那么你可以做==如果你输入字符串。但这完全是额外的内容

编辑:另外,正如johnchen902在评论中所说:

猜猜[i]!=x应该是!猜猜[i].equalsx.在findNearMatches中

这些是字符串,因此您应该使用equals,即guess[i].equalsecretcode[i]

猜测[i]==secretCode[i]将比较两个字符串操作符的引用,比较您不想要的对象在内存中的位置

请看这个了解更多-

guess[i]!=x也同样适用,因此您将使用!guess[i]。equalsx

这些是字符串,因此您应该使用equals,即guess[i]。equalssecretCode[i]

猜测[i]==secretCode[i]将比较两个字符串操作符的引用,比较您不想要的对象在内存中的位置

请看这个了解更多-

guess[i]!=x也同样适用,因此您将使用!guess[i]。equalsx

将guess[i]==secretCode[i]替换为guess[i]。equalssecretCode[i]和guess[i]!=x替换为!guess[i]。equalsx

==参考等式测试

.equals测试值是否相等

你可以找到更多信息

将guess[i]==secretCode[i]替换为guess[i]。equalsecretcode[i]并将guess[i]!=x替换为!guess[i]。equalsx

==参考等式测试

.equals测试值是否相等

你可以找到更多信息


猜[i]!=x应该是!猜[i].equalsx.在FindNearMatchesHanks!我已经读了好几遍关于equals的书,但我猜我读错了。我试图用equalsguess[i],secretCode[i]来代替你描述的方式。猜[i]!=x应该是!猜[i].equalsx.findNearMatchesThanks!我已经读了好几遍关于equals的书,但我想我读错了。我试着做equalsguess[I],secretCode[I]与你描述的方式不同。我读到你应该使用equals来代替。我也尝试过使用equals,但出现了一个错误。如果你告诉我们错误是什么,这会有所帮助,因为修复它可能是唯一真正的解决方案。-1;这个问题已经在谷歌的这里和其他地方被询问和回答了5亿次。作为补充说明,你应该避免重复调用for循环中的Arrays.asList。要么使用原始数组并编写自己的contains和indexOf方法;要么坚持使用一些ArrayList。谢谢Gyro!这是一个有用的提示。我接受了你的建议并使用了自己的方法。我读到你应该使用equals,也尝试过,但出现了一个错误。如果你告诉我们那个错误是什么,因为修复它可能是唯一真正的解决方案。-1;这个问题已经在Google的这里和其他地方被询问和回答了5亿次。作为补充说明,您应该避免在for循环中重复调用Arrays.asList。或者使用原始数组编写您自己的contains和indexOf方法;或者sti和一些ArrayList联系。谢谢你,Gyro!这是一个有用的提示。我接受了你的建议,使用了我自己的方法。非常感谢!我知道我现在做错了什么。非常感谢你描述了我是如何做的
这两种方法比较和链接。非常感谢!我明白我现在做错了什么。非常感谢您对这两种方法的比较和链接的描述。非常感谢您的链接。这很有帮助。非常感谢你的链接。这很有帮助。
public String[] guess;
      public String[] secretCode;
      public String[] feedback;

      public String[] get(String[] guess, String[] secretCode) {
        this.guess = Arrays.copyOf(guess, guess.length);
        this.secretCode = Arrays.copyOf(secretCode, secretCode.length);
        feedback = new String[this.secretCode.length];
        findExactMatches();
        findNearMatches();
        findNoMatches();
        sortFeedback();
        return feedback;
      }

      public void findExactMatches() {
        for (int i = 0; i < guess.length; i++) {
          if (guess[i].equals(secretCode[i]) ) {
            feedback[i] = "b";
            guess[i] = "x";
            secretCode[i] = "x";
          }
        }
      }

      public void findNearMatches() {
        for (int i = 0; i < guess.length; i++) {
          if ( Arrays.asList(secretCode).contains(guess[i]) && !guess[i].equals("x") ) {
            feedback[i] = "w";
            int matched_symbol_index = Arrays.asList(secretCode).indexOf(guess[i]);
            secretCode[matched_symbol_index] = "x";
          }
        }
      }