Java说一切都是回文

时间:2017-10-19 05:33:07

标签: java palindrome

我正在编写一个从一个文件中读取文本的程序,然后确定它是否是回文。一个问题是,它认为一切都是一个。这是我的代码:

   String input = "";
   String reversed = "";
   String answer = "";
   int count = 0;
   int low = 0;
   int high = input.length() - 1;

   outF.println("Palindrome   Input String            New String");

   while (inF.hasNext()){
       input=inF.nextLine();
       reversed = new StringBuffer(input).reverse().toString();
        boolean isPalindrome;
       while (low < high) {
         isPalindrome = true;
           if (input.charAt(low) != input.charAt(high)) {
            isPalindrome = false;
            break;
         }
         low++;
         high--;

       }
       if (isPalindrome = true){
          answer = "yes";}
       else{
           answer = "no";}

       outF.printf("  %-10s %-23s %s %n", answer, input.trim(), reversed.trim());

       count++;
   }

这是我的输出:

Palindrome   Input String            New String
  yes        STAR RATS               STAR RATS 
  yes        STAT                    TATS 
  yes        LEVEL                   LEVEL 
  yes        MALAYALAM               MALAYALAM 
  yes        Solos                   soloS 
  yes        kaya                    ayak 
  yes        Radar                   radaR 
  yes        Regal lageR             Regal lageR 
  yes        Straw wartS             Straw wartS 
  yes        RSTUVWXYZXWVUTSR        RSTUVWXZYXWVUTSR 
  yes        DeifieD                 DeifieD 
  yes        ABBA                    ABBA 
  yes        mama anna mama          amam anna amam 
  yes        noel leon               noel leon 
  yes        Racecar                 racecaR 
  yes        galleonnoelag           galeonnoellag 
end of program 16 strings were processed

有谁知道可能导致这种情况的原因?我正在按照我的书所说的去找出是否有什么是回文

我把一些东西看成是这样的:            boolean isPalindrome = true;            而(低<高){

           if (input.charAt(low) != input.charAt(high)) {
            isPalindrome = false;
            break;
         }
         low++;
         high--;

       }
       if (isPalindrome ){
          answer = "yes";}
       else{
           answer = "no";}

       outF.printf("  %-10s %-23s %s %n", answer, input.trim(), reversed.trim());

       count++;

它仍然无法正常工作。如果我把它保留原样,它会试图说isPalindrome没有被定义。

2 个答案:

答案 0 :(得分:0)

while (inF.hasNext()){
   input=inF.nextLine();
   reversed = new StringBuffer(input).reverse().toString();
    boolean isPalindrome;
int low = 0;
int high = input.length() - 1;

   while (low < high) {
     isPalindrome = true;
       if (input.charAt(low) != input.charAt(high)) {
        isPalindrome = false;
        break;
     }
     low++;
     high--;

   }

在while循环中声明lowhigh个变量。

答案 1 :(得分:-1)

您的代码有两个问题:

  1. 你在while()循环中声明了isPalendrome。因此,您无法从循环外部访问它。只需将boolean isPalindrome;移到while()循环之外。
  2. 您不会将任何变量与此语句进行比较 if (isPalindrome = true){。使用单个=您可以为变量赋值。因此,你的if语句总是如此。要比较两个必须使用的变量==:if (isPalindrome == true){
  3. 编辑:我还发现了一些其他问题:

    1. high = input.length() - 1;在您的程序中始终为-1。此时,while() - 循环内部必须为high = 0;high = input.length() - 1;,因此在每次运行时都会通过while() - 循环将其设置为length-1。
    2. 每次运行后你必须重置低:你必须在while循环中声明low = 0;
    3. 现在它对我来说很完美。