【问题标题】:Program to check for a Palindrome检查回文的程序
【发布时间】:2014-07-20 14:50:56
【问题描述】:

我正在尝试编写一个将 long 转换为字符串并检查它是否是回文的程序,到目前为止我已经编写了以下内容,但是它给了我一个不兼容的类型错误,我似乎无法找出导致它的原因。 :S 任何帮助将不胜感激:)

错误发生在第 24 行,它说类型不兼容 - found void but expected java.lang.String

public class programPalindrome

{

private String go()
 {

  Input in = new Input ();
  System.out.print("Enter Number: ");
  return in.nextLine();
  long number = in.nextLong();
  String Palindrome = Long.toString(number); // converts the long into a string
  String newAnswer = reverse(Palindrome);
  String anotherAnswer = reverseCheck(Palindrome,newAnswer);
  System.out.println("This is a Palindrome" + Palindrome);
}
 // Check to see if the two argument Strings are the reverse of each
  // other. 

 private String reverseCheck(String Palindrome, String newAnswer)
{
  if (Palindrome.compareTo(newAnswer) == 0) {
    return System.out.println("It is a palindrome");
  }
  else
  {
    return System.out.println("It is not a palindrome");
  }
  }

  // Return a String which is the reverse of the argument String
  private String reverse(final String Palindrome)
  {
  String result = new String();
  int position = 0;
  while (position < Palindrome.length())
  {
    result = new Character(newAnswer.charAt(position)).toString() + result;
    position = position + 1;
  }
  return result;
 }


 public static void main(String[] args)
 {
  new programPalindrome().go();
 }
}

【问题讨论】:

  • 你能发布堆栈跟踪吗?
  • 请添加错误信息和发生的行。
  • 编译失败在哪里?请问可以添加stackTrace吗?
  • 你从函数的中间返回——go()中的第三行
  • 为什么人们要编写代码来做到这一点?那里有一些该死的东西需要测试吗?

标签: java


【解决方案1】:

尝试改变

return System.out.println("It is not a palindrome");

到

return "It is not a palindrome";

和

return System.out.println("It is a palindrome");

到

return "It is a palindrome";

(已添加 - 此外,您的 go() 方法中存在逻辑错误。无论它是否有效,它都会打印出“这是一个回文”......)

【讨论】:

  • 感谢您的帮助,我只做了几个星期的 java,所以这是一个相当新手的问题
  • 祝你学习顺利……你应该研究一下 Java 方法是如何工作的。尝试一个教程或一本好的教科书。我认为 Sun 有一个很好的教程。您可以查看此 SO 帖子:stackoverflow.com/questions/1471636/im-new-in-java-what-to-read
【解决方案2】:

我在下面做了这样的事情。首先,来自用户的输入,然后是字符串的反转。接下来比较用户字符串和反转一个,如果相同 -> 打印“Palindrom”,如果不是“Not Palindrom”。添加“ignoreCase”以防万一。 ;)

public static void main(String[] args) 
{
    System.out.print("Enter the word: ");
    Scanner userInput = new Scanner(System.in);
    String word = userInput.nextLine();

    String drow = new StringBuilder(word).reverse().toString();

    if(word.equalsIgnoreCase(drow))
    {
        System.out.print("Palindrom");
    }
    else if (!word.equalsIgnoreCase(drow))
    {
        System.out.print("Not Palindrom");
    }
}

【讨论】:

  • 好的,抱歉。添加评论。
【解决方案3】:

当你的函数签名说你想返回一个字符串时,你不能返回 System.out.println...你有另一个语法错误在行

result = new Character(newAnswer...

newAnswer 无法在该范围内解决...您使用的是 Eclipse 之类的 IDE 吗?这可能会对你有很大帮助。

这里有一个更简单的程序来做同样的事情:

public class programPalindrome 

{ 

    static public boolean isPalindromic(long value){
        String valueAsString = Long.toString(value);
        String reverseString = (new StringBuffer(valueAsString)).reverse().toString();
        if(valueAsString.equals(reverseString)){
            return true;
        }
        else{
            return false;
        }
    }


    public static void main(String[] args) 
    {

        System.out.println(args[0] + " is palindromic == " 
                + isPalindromic(Long.parseLong(args[0])));
    } 
}

【讨论】:

    【解决方案4】:

    好吧,一方面,您正在调用返回void 的System.out.println(),并尝试在您的reverseCheck() 函数中将其作为String 返回。决定:您要打印结果,还是返回(可能是bool)?

    【讨论】:

      【解决方案5】:
      private String go()
       {
      
        Input in = new Input ();
        System.out.print("Enter Number: ");
        return in.nextLine();
        long number = in.nextLong();
        String Palindrome = Long.toString(number); // converts the long into a string
        String newAnswer = reverse(Palindrome);
        String anotherAnswer = reverseCheck(Palindrome,newAnswer);
        System.out.println("This is a Palindrome" + Palindrome);
      }
      

      编译器不应该让您在返回后放置无法访问的代码。我认为您不了解函数的工作原理。

      【讨论】:

        【解决方案6】:

        在您的 reverseCheck() 方法中,您尝试返回一个 void,但您将返回类型列为字符串。 System.out.println() 返回 void - 它只是打印到屏幕上。而是返回字符串“它是回文”或“它不是回文”

        【讨论】:

          【解决方案7】:
          return System.out.println("It is not a palindrome");
          

          println 不返回任何内容。

          【讨论】:

            【解决方案8】:

            StringBuffer 有一个反向方法,所以这应该可以工作:

            public static boolean checkForPalindrom(String s){
                StringBuffer buf=new StringBuffer(s);
                return s.equals(buf.reverse().toString());
            }
            

            【讨论】:

              【解决方案9】:

              这并不是解释你的代码有什么问题(其他人已经解释过了),但你为什么不尝试使用它呢:

              public class SO {
                  public static void main(String[] args) {
                      System.out.println(isPalindrome("aaaaaa"));
                      System.out.println(isPalindrome("aaazzaa"));
                      System.out.println(isPalindrome("aaazaaa"));
                      System.out.println(isPalindrome("zzzbb"));
                      System.out.println(isPalindrome("zzbb"));
                  }
              
                  public static boolean isPalindrome(String word) {
                      for (int i = 0; i <= word.length()/2; i++) {
                          if (word.charAt(i) != word.charAt(word.length()-1-i)) {
                              return false;
                          }
                      }
              
                      return true;
                  }
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-09-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-04-29
                相关资源
                最近更新 更多