回文代码在Java

时间:2015-07-01 10:08:33

标签: java arrays

这是我正在做的任务,似乎我无法让它正常工作。

问题如下。

  

回文是一个单词或短语,读取相同的向前和   向后,忽略空白并考虑大写和小写   相同字母的版本相同。例如,以下是   回文:

     
      
  1. 疣n秸秆
  2.   
  3. 雷达
  4.   
  5. 能够在我看到厄尔巴岛时
  6.   
  7. xyzczyx
  8.         

    编写一个程序,接受一系列字符终止   按一段时间,将决定是否字符串 - 没有   period ---是一个回文。你可以假设输入只包含   字母和空格,最多80个字符。包括一个循环   允许用户检查其他字符串直到她或他   要求程序结束。

         

    提示:定义一个名为isPalindrome的静态方法,其开头为   如下:

         

    前提条件:数组a包含字母和空格   职位a[0]a[used - 1]。如果字符串是a,则返回true   回文,否则为假。

         

    public static boolean isPalindrome(char[] a, int used)

         

    您的程序应将输入字符读入基数的数组中   type是char然后调用前面的方法。使用的int变量   跟踪使用了多少阵列,如中所述   题为“#34;部分填充阵列”的部分。"

这是我的班级代码:

public class Palindrome_class 
{
// instance variable
char[] characterArray;

//constructor
//@param data is a string of characters
public Palindrome_class(String data)
{
    characterArray = data.toUpperCase().toCharArray();
}

//@return true if the word is a palindrome, otherwise returns false.
public boolean isPalindrome(char[] a, int used)
{
    int i = 0, j = used - 1;

    while (i < j)
    {
        if(characterArray[i] == characterArray[j])
        {
            i++;
            j--;
        }
        else
        {
            return false;
        }
    }
    return true;
  }
}

这是我的主要代码:

import java.util.Scanner;



public class palindromeTest 
{ 
public static void main(String[] args) 
{ 
    int used = 0;
    char[] chars = new char[80];
    Scanner inputWord = new Scanner(System.in);
    Scanner reply = new Scanner(System.in);
    System.out.println("Enter a string characters, terminated by a period.");

    String data;
    String cq;
    Palindrome_class word;

    do
    {
    //input word from user.
        data = inputWord.nextLine();
        word = new Palindrome_class(data);

    //check for palindrome.
        if(word.isPalindrome(chars, used))
        System.out.println(data + " is a palindrome.");

        else
        System.out.println(data + " is not a palindrome.");

    //request to continue or quit.
        System.out.println("Continue or Quit?");
        cq = reply.nextLine();
    }
    while (cq.equalsIgnoreCase("continue"));

    System.exit(0);
   }
}

结果如下:

输入字符串字符,以句点结束。

雷达。

雷达。是一个回文。

继续或退出?

继续

使用

使用是回文。

继续或退出?

继续

使用。

使用。是一个回文。

继续或退出?

继续

苹果。

苹果。是一个回文。

继续或退出?

退出

请告诉我我在哪里犯了错误。

2 个答案:

答案 0 :(得分:3)

您正在通过此调用检查String是否为回文:

if(word.isPalindrome(chars, used))

但是,used为0,因此您的方法始终返回true。

您也忽略了作业的指示。你没有对chars数组做任何事情,你没有删除应该在输入字符串末尾的句点,你的isPalindrome方法不是静态的等等......

答案 1 :(得分:0)

你做了一个小小的错误。你每次都将“used”变量发送为0。理想情况下,它应该是一个单词的长度。 请检查一下。使用

used = data.length();

将其发送给检查方法