简体   繁体   English

Java将单个字符与字符数组进行比较

[英]Java Compare single char to char array

I need to compare single char to char array and see if array has that char. 我需要将单个char与char数组进行比较,看看array是否具有该char。

My current code looks like this: 我当前的代码如下所示:

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;
}

Edit Notes: 编辑注释:

Really sorry for being confusing! 真抱歉,造成混淆! I am just a Java Beginner =/ 我只是Java初学者= /
Basically I am writing small Hangman game with GUI. 基本上我是用GUI编写小型Hangman游戏。
My program reads off text file and randomly chooses word which player has to guess, then prints it out in hidden manner like this: _ _ _ _ _ 我的程序读取了文本文件,并随机选择了玩家必须猜测的单词,然后以隐藏方式将其打印出来,如下所示:_ _ _ _ _
In this case I want player to input character or string (person can guess either whole word or just one letter) 在这种情况下,我希望玩家输入字符或字符串(人们可以猜测整个单词或仅一个字母)
Then I want my program to take that letter or string and compare to my hidden word 然后,我希望我的程序采用该字母或字符串并与隐藏的单词进行比较

Following code chooses word and hides it: 以下代码选择单词并将其隐藏:

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;
}

Then person input his character which he guesses to program with following code: 然后人输入他想用以下代码编程的字符:

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());
        }
    }

Lastly I want to take that character which was inputted and compare to my array of chars which is my hidden word: 最后,我要输入的字符与我隐藏的单词字符数组进行比较:

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;
}

I want to check what does my code returns (true or false), but I keep failing at doing so. 我想检查我的代码返回什么(对或错),但是我一直失败。 (Right now I am trying to call method in my main class to check it, if you can give me tips how to do it otherwise please let me know.) (现在,我正在尝试在主类中调用method进行检查,如果可以给我提示如何做的话,否则请告诉我。)

I would use: Chars.contains(array, chr); 我将使用: Chars.contains(array, chr); with Guava Chars 番石榴糖

The NullPointerException is happening because either chaArray or chr is null when you call the method. 之所以发生NullPointerException,是因为调用该方法时chaArraychrnull ( And if not, then the NullPointerException is occurring somewhere else!! ) 如果不是,则NullPointerException发生在其他地方!

The other problem with your code is this line: 您的代码的另一个问题是这一行:

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

Since chr is actually a String, what is going to happen here is that the value of chaArray[i] will be auto-boxed as a Character object, and then passed as an argument to String.equals(Object) . 由于chr实际上是一个String,因此这里将发生的是chaArray[i]的值将自动装箱为Character对象,然后作为参数传递给String.equals(Object) But the String.equals(Object) will return false unless its argument is a String ... so your code wouldn't find the character anyway. 但是,除非String.equals(Object)的参数为String否则它将返回false ,因此您的代码将始终找不到该字符。

You need to either compare the character like this: 您需要像这样比较字符:

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

or declare chr to be a char and compare it as: 或将chr声明为char并将其比较为:

  if (chr == chaArray[i]) {

Let's see if I got what you need : 让我们看看我是否满足您的需求:

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());
        }
    }
}

String chr might be null causing NullPointerException . String chr可能为null,从而导致NullPointerException

Use char chr instead of String . 使用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;
}

Select the character from the parameter passed in, or pass in a char eg 从传入的参数中选择字符,或传入一个字符,例如

chr[0]

or 要么

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";
}
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
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM