【问题标题】:Java Compare single char to char arrayJava将单个字符与字符数组进行比较
【发布时间】:2012-08-08 21:34:46
【问题描述】:

我需要比较单个字符和字符数组,看看数组是否有那个字符。

我当前的代码如下所示:

public boolean isThereChar(char[] chaArray, String chr){
    boolean bool = false;
    for(int i=0; i < chaArray.length; i++)
            {
                if(chr.equals(chaArray[i])){
                    bool = true;
                }
            }
            return bool;
}

编辑备注:

真的很抱歉让您感到困惑!我只是一个 Java 初学者 =/
基本上我正在用 GUI 编写小型刽子手游戏。
我的程序读取文本文件并随机选择玩家必须猜测的单词,然后以这样的隐藏方式打印出来:_ _ _ _ _
在这种情况下,我希望玩家输入字符或字符串(人们可以猜出整个单词或只猜一个字母)
然后我希望我的程序获取那个字母或字符串并与我的隐藏词进行比较

以下代码选择单词并将其隐藏:

public String pickWord(){
    String guessWord = (wordsList[new Random().nextInt(wordsList.length)]);
    return guessWord.toLowerCase();
}

//Hides picked word
public char[] setWord(){
    char[] word = new char[pickWord().length() * 2];
    for (int i = 0; i < word.length; i+=2) {
        word[i] = '_';
        word[i + 1] = ' ';
    }
    return word;
}

然后人们输入他猜想用以下代码编程的字符:

public void actionPerformed(ActionEvent e) {
    String action = e.getActionCommand();

    if (action == "Guess Letter"){
        inputChar = JOptionPane.showInputDialog("Please enter letter (a-z)");
        if (inputChar.length() > 1){
            GuessedLetters glr = new GuessedLetters(inputChar);
            glr.setInString(inputChar);
            //For testing purposes
            System.out.println("This is String: " +glr.getInString());              
        }else{
        GuessedLetters glr = new GuessedLetters(inputChar);
        glr.setInChar(inputChar);
        //For testing purposes
        System.out.println("This is Char: " +glr.getInChar());
        }
    }

最后我想把输入的那个字符和我的字符数组进行比较,这是我的隐藏词:

public boolean isThereChar(char[] array, String str){
    return isThereChar(array, str.charAt(0));
}

public boolean isThereChar(char[] array, char c){
    for(int i=0; i<array.length; i++){
        if (array[i] == c) return true;
    }
    return false;
}

我想检查我的代码返回了什么(真或假),但我一直没有这样做。 (现在我正在尝试在我的主类中调用方法来检查它,如果您能给我提示如何操作,请告诉我。)

【问题讨论】:

  • 但您正在比较单个字符串。没有一个字符。
  • 并且函数返回字符串。不是字符数组
  • 请提供更多代码,此方法对 NPE 提供的代码不够
  • 你能在你使用isThereChar()的地方贴一些代码吗?
  • 您正在与整个数组进行比较。不是元素方面的

标签: java arrays comparison char


【解决方案1】:

让我们看看我是否得到了你需要的东西:

public void actionPerformed(ActionEvent e) {
    String action = e.getActionCommand();
    if (action == "Guess Letter"){
        inputChar = JOptionPane.showInputDialog("Please enter letter (a-z)");
        if (inputChar.length() > 1){ //User input is a string here, right?
            GuessedLetters glr = new GuessedLetters(inputChar);
            glr.setInString(inputChar);
            System.out.println(wordToGuess.contains(glr.getInString())); //This will print true if wordToGuess is equal to glr.getInString() or if it just contains it
            //For testing purposes
            System.out.println("This is String: " +glr.getInString());              
        }else{ //Here the user gave us just a character, so we've got to know if this character is contained in the word, right?
        GuessedLetters glr = new GuessedLetters(inputChar);
        glr.setInChar(inputChar);
        System.out.println(wordToGuess.contains(glr.getInChar()); //This will print true if your char is in the wordToGuess string
        //For testing purposes
        System.out.println("This is Char: " +glr.getInChar());
        }
    }
}

【讨论】:

  • 也许你知道如何检查它返回的内容?试图打印出来以确保答案是正确的,但它只是给了我空指针异常
  • 您需要知道什么?找到的字符的索引?它在哪里给出 NPE?你检查过你的char[] array 不为空吗?
  • 是的,我一创建就打印出来。我想我只是不知道如何检查这个方法返回的值。有什么想法吗?
  • 我仍然没有得到你需要的东西。我将用一个例子来编辑我的答案,看看我是否能帮助你
  • 基本上我希望这个方法检查 used 输入的 char 是否在我的 char 数组中。如果不是,则返回 true - false。我还想打印出天气是真还是假以进行测试。我被卡在了打印部分。
【解决方案2】:

发生 NullPointerException 是因为当您调用该方法时,chaArraychrnull。 (如果没有,那么 NullPointerException 正在其他地方发生!!

您的代码的另一个问题是这一行:

  if (chr.equals(chaArray[i])) {

由于chr 实际上是一个字符串,所以这里会发生chaArray[i] 的值将被自动装箱为Character 对象,然后作为参数传递给String.equals(Object)。但是 String.equals(Object) 将返回 false 除非它的参数是 String ...所以您的代码无论如何都找不到该字符。

您需要像这样比较字符:

  if (chr.charAt(0) == chaArray[i]) {

或将chr 声明为char 并将其比较为:

  if (chr == chaArray[i]) {

【讨论】:

  • NullPointerException 仅在我尝试打印布尔值以检查它是否正确时发生。
  • 所以 NPE 没有出现在上面的代码中......就像我说的那样。如果您希望我们解释 NPE,则需要发布引发它的代码。
  • 任何想法如何检查它给出了什么价值?好像我只是检查错了。
  • 除非您向我们展示代码和堆栈跟踪,否则我们无法帮助您。
【解决方案3】:
public boolean  isThereChar(char[] chaArray, char chr){        
for(int i=0; i < chaArray.length; i++)
        {
            if((chaArray[i]==chr)){
                return true;   // means Character exist in the Character array
            }
        }
        return false;  //// means Character does not exist in the Character array
}

【讨论】:

    【解决方案4】:

    我会使用:Chars.contains(array, chr);Guava Chars

    【讨论】:

      【解决方案5】:

      String chr 可能为 null 导致 NullPointerException

      使用char chr 而不是String

      public boolean isThereChar(char[] chaArray, char chr){
          boolean bool = false;
          for(int i=0; i < chaArray.length; i++) {
              if(chr==chaArray[i])){
                   bool = true;
              }
          }
          return bool;
      }
      

      【讨论】:

        【解决方案6】:

        从传入的参数中选择字符,或者传入一个字符例如

        chr[0]
        

        public String isThereChar(char[] chaArray, char chr){
            for(int i=0; i < chaArray.length; i++)
                    {
                        if(chr.equals(chaArray[i])){
                            return chr;
                        }
                    }
                    return "Guess Again";
        }
        

        【讨论】:

        • 因为这是 Java,你会想使用chr.charAt(0)
        猜你喜欢
        • 1970-01-01
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 2017-02-20
        • 2010-10-06
        相关资源
        最近更新 更多