我如何在java中做回文?

时间:2014-02-13 23:37:10

标签: java

第一次在这里发帖!是的,我只是需要一些帮助这项任务。我们必须读取一个输入文件,对输入文件的一行中的每个字符进行循环,并将该信息存储在char数组中,然后最后编写一个isPalindrome方法并调用它来确定该行是否为回文并将其打印到控制台。

这就是我到目前为止,对不起,如果我没有正确格式化,那有点令人困惑。 我还是个初学者,我不知道自己哪里出错了。我的输出基本上是“[C @ 91bee48不是回文!”一遍又一遍,关于它是否是一个回文。

public class Palindromes {
    public static void main(String[] args) {
        int k = 0;

        try {
          Scanner inF = new Scanner(new File("palindromes.txt"));
          String aString;
          while (inF.hasNextLine()) {
            aString = inF.nextLine();
            k++;
            for (int i = 0; i < k; i++) {
              char[] phrases = new char[aString.length()];
              if (Character.isLetter(aString.charAt(k))) {
                phrases[i] = aString.charAt(i);
              }
              isPalindrome(phrases);
            }
          }
        }

        catch (FileNotFoundException e) {
          System.err.println("palindromes.txt not found!");
        }
    }


    public static void isPalindrome(char[] phrases) {
        boolean isPalindrome = false;
        int i1 = 0;
        int i2 = phrases.length - 1;
        while (i2 > i1) {
          if (phrases[i1] != phrases[i2]) {
            isPalindrome = false;
            System.out.println(phrases + " is not a palindrome!");
          } else {
            isPalindrome = true;
            System.out.println(phrases + " is a palindrome!");
          }
          i1++;
          i2--;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

使用Arrays.toString()获取表示数组的字符串。

例如:

System.out.println(Arrays.toString(phrases) + " is not a palindrome!");

否则你得到一个数组对象的默认toString() - 这不是你想要的。

答案 1 :(得分:0)

while循环的逻辑错误。这种循环是一种常见的习惯用法:你必须检查一些事情,如果任何检查失败,你希望结果为false。如果没有检查失败,您希望结果为true。问题是,在循环完成之前,您无法判断结果是否为true。您的代码是:

while (i2 > i1)
{
    if(phrases[i1] != phrases[i2])
    {
        isPalindrome = false;
        System.out.println(phrases + " is not a palindrome!");
    }
    else
    {
        isPalindrome = true;
        System.out.println(phrases + " is a palindrome!");
    }
    i1++;
    i2--;
}

问题是你在检查完所有字符之前打印"is a palindrome",你不可能知道。编写这种循环的方法是这样的:

isPalindrome = true;
while (i2 > i1)
{
    if(phrases[i1] != phrases[i2])
    {
        isPalindrome = false;
        break;  // get out of the loop, it's pointless to continue
    }
    i1++;
    i2--;
}
// *** NOW you can check isPalindrome and display your output