0

我正在尝试查看两个 char 数组是否相等,但是由于某种原因,它们似乎从未正确读取为与 Java 相等。我很确定这可能与我对 Arrays.equals() 方法缺乏了解有关,所以如果有人愿意解释 Arrays.equals() 在数组中的外观,那将是很棒的(从我的角度来看)从一个简单的谷歌搜索中看到,它似乎检查了数组中有多少元素,然后是内容,但我对方法在元素中查看的内容感兴趣,例如大写字母是否使其不相等)

因为这很可能只是错误的代码,所以这是我的代码:

int count = 0;
    Highscore words = new Highscore();

    String word = words.getWord();
  word = word.toUpperCase();
    char guess;

    for(int i = 0; i<word.length(); i++)
    {
        charwo[count] = word.charAt(i);
        charda[count]= '_';
        count++;
    }

    int guesses =7;

    while(guesses != 0 || !Arrays.equals(charwo, charda))
    {
        System.out.println("");

        for(int l=0; l<count; l++)
        {
            System.out.print(" "+charda[l]);

        }


   guess = JOptionPane.showInputDialog("Enter letter ").charAt(0);


    if(word.toUpperCase().contains(String.valueOf(guess).toUpperCase()))
    {

        for(int k = 0; k<word.length(); k++)
        {
            if(String.valueOf(guess).toUpperCase().equals(String.valueOf(charwo[k]).toUpperCase()))
            {
                charda[k]=charwo[k];


            }

          }


    }


    else
    {

            guesses = guesses-1;

            System.out.println("guesses left "+guesses);
    }



            }

}
4

4 回答 4

3

Arrays.equals()的,适用于 char 数组。char 是一种原始类型,可以安全地使用 ==。

也来自文档

如果两个指定的字符数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对相等,则认为两个数组相等。换句话说,如果两个数组以相同的顺序包含相同的元素,则它们是相等的。此外,如果两个数组引用都为空,则认为两个数组引用相等。

于 2013-08-21T11:32:54.617 回答
1

你可能想要

while(guesses != 0 && !Arrays.equals(charwo, charda))

代替

while(guesses != 0 || !Arrays.equals(charwo, charda))

当用户仍然有猜测并且他没有找到解决方案时继续循环。

如果对您的算法有疑问,请在调试模式下启动应用程序,逐行执行它,然后评估表达式以查看它们的值。使用所有当前的 IDE(例如 IntelliJ、Eclipse、NetBeans)都非常容易。

于 2013-08-21T11:34:18.013 回答
0

Arrays.equals()适用于 char 数组,因为它也是 java 中的一个数组。我想你可以自己检查一下。

于 2013-08-21T11:40:17.643 回答
0

从源代码:

Arrays.equals按顺序检查以下

  1. 如果它们是相同的引用,则返回 true。
  2. 如果其中任何一个为null,则返回false
  3. 如果它们的长度不匹配,则返回 false。
  4. 迭代内容并将索引处的每个字符与同一索引处的其他数组进行比较。在第一次不匹配时返回 false。
于 2013-08-21T11:39:00.090 回答