【问题标题】:How to pass a char array to a method and return a boolean value如何将 char 数组传递给方法并返回布尔值
【发布时间】:2015-03-04 09:39:07
【问题描述】:

我正在尝试编写一个程序来检查一个单词是否是回文。我的代码可以编译,但 isItPalindrome 方法中的代码似乎根本没有运行。我希望有人能指出我哪里出错了。这是我的代码:

class Main
{
public static void main ( String args[] )
{
    System.out.print ("#Enter word");
    String word = BIO.getString();

    String wordLowerCase = word.toLowerCase();                                        // converts word to lower case (only way i could think of to ignore case)
    char letters[] = wordLowerCase.toCharArray();                                     // converts string into an array of character


    while ( !word.equals ("END")){
        if (isItPalindrome(letters) == true)
        {
            System.out.print (""+word+"");
            System.out.println ("   is a palindrome");

        }
        else if (isItPalindrome(letters) == false)
        {
            System.out.print (""+word+"");
            System.out.println ("   is not a palindrome");
        }

        System.out.print ("#Enter word");
        word = BIO.getString();

    }

}

public static boolean isItPalindrome ( char letters[]){

    boolean palindrome = true;
    if (letters.length%2 == 0){
        for (int index=0; index<letters.length/2-1; index++)                              //index will finish at letters/2  
        {
            if (letters[index] != letters[letters.length-index-1])                                       //checks if index is the same as its opposite letter
            {
                return false;

            }
            else                                                                         //if any pairs of letters are not in ascending order then it returns fasle and breaks out of the loop
            {
                palindrome = true;

            }

        }
    }
    else{
        for (int index = 0; index < (letters.length-1)/2-1; index++)
        {
            if (letters[index] != letters[letters.length-index-1]){

                return false;

            }
            else{

                palindrome = true;
            }  

        }
    }

    return palindrome;
}

}

【问题讨论】:

  • 似乎根本没有运行。你怎么知道?
  • 另外,你永远不会更新letters,所以你只有第一个单词的字母。
  • 什么是 BIO (word = BIO.getString();)?
  • 另外,删除-1(所有三个)(并且您不需要根据letters.length%2制作2个不同的案例,因为letters.length%2 == 1 -> (letters.length-1)/2 == letters.length/2
  • 尝试将 System.out.println() 添加到您的 isItPalindrome 中,并打印每个被比较字符的值。这样你就可以自己找出逻辑出了什么问题。此外,与其调用该方法两次,不如调用一次并将返回值分配给布尔值会更简单。

标签: java methods boolean palindrome arrays


【解决方案1】:

首先,回答标题中的问题:

public boolean palindrome(char C)

返回类型为boolean,但要求您传递一个字符。

第二:

您将单词反转以检查它们的方式过于复杂。你可以简单地把这个词当作一个字符串,然后把它拆开,把它放到一个Characters的数组中。然后将每个char 变量放入Stack。然后,当您将它们逐个从堆栈中取出时,将它们复制到另一个 Characters 数组中。

【讨论】:

    【解决方案2】:

    main-method 中存在一些问题,例如 char-array 从未更新,palindrome-method 非常复杂,这里是工作版本:

    public static void main(String args[]) {
        System.out.print("#Enter word: ");
        String word = BIO.getString();
    
        while (!word.equals("END")) {
            char[] letters = word.toLowerCase().toCharArray();
    
            if (isItPalindrome(letters) == true) {
                System.out.println(word + "   is a palindrome");
            } else {
                System.out.print(word + "   is not a palindrome");
            } // OR
            // Use this one-liner instead of the if:
            // System.out.println(word + isItPalindrome(letters) ?
            //                     "   is a palindrome" : "   is not a palindrome");
    
        System.out.print("#Enter word: ");
        word = BIO.getString();
        }
    
    }
    
    public static boolean isItPalindrome(char letters[]) {
        for (int i = 0; i < letters.length / 2; i++) {
            if (letters[i] != letters[letters.length - i - 1]) {
                return false;
            }
        }
    
        return true;
    }
    

    希望这会有所帮助。

    【讨论】:

    • 非常感谢,这是一个巨大的帮助,我没有意识到我把事情复杂化了这么多!
    【解决方案3】:

    除了初始单词之外,您的字符数组 letters 永远不会在您的 main 方法内的 while 循环中反映当前的 word。当您说您的方法“似乎根本没有运行”时,我不知道您的意思,但我认为您的意思是它正在以错误的输出运行。这是原因之一。请务必致电

    wordLowerCase = word.toLowerCase();
    letters = wordLowerCase.toCharArray();
    

    while 循环的每次迭代。

    旁注:在您的 isItPalindrome 方法中,您甚至根本不需要任何 else 语句或布尔值 palindrome。只需return false,如果您发现这个词不是像您现在这样的回文词。那么,如果你已经读完了,那一定是回文,你可以return true

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多