Программа для проверки на палиндром - PullRequest
1 голос
/ 17 февраля 2010

Я пытаюсь написать программу, которая конвертирует long в строку и проверяет, является ли это палиндромом. Я уже написал следующее, но это дает мне ошибку несовместимых типов, и я не могу показаться чтобы найти то, что вызывает это. : S Любая помощь будет высоко ценится :)

Ошибка возникает в строке 24 и говорит о несовместимых типах - найдено недействительным, но ожидается 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();
 }
}

Ответы [ 9 ]

2 голосов
/ 17 февраля 2010

Попробуйте изменить

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() есть логическая ошибка. Он выводит «Это палиндром» независимо от того, работает он или нет ...)

2 голосов
/ 18 июля 2014

Я сделал это примерно так, ниже. Сначала ввод от пользователя, затем обратная строка. Далее сравните пользовательскую строку и сторнированную, если она одинакова -> Выведите «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");
    }
}
1 голос
/ 17 февраля 2010

В вашем методе reverseCheck () вы пытаетесь вернуть void, но у вас есть тип возвращаемого значения, указанный как String. System.out.println () возвращает void - он просто печатает на экран. Вместо этого верните строку «это палиндром» или «это не палиндром»

1 голос
/ 17 февраля 2010
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);
}

Компилятор не должен позволять вам ставить недоступный код после возврата. Я не думаю, что вы понимаете, как работают функции.

1 голос
/ 17 февраля 2010

вы не можете вернуть System.out.println, когда ваша сигнатура функции говорит, что вы хотите вернуть строку ... у вас есть другая синтаксическая ошибка в строке

result = new Character(newAnswer...

newAnswer не может быть разрешен в этой области ... вы используете IDE, например Eclipse? Это, вероятно, очень вам поможет.

Вот более простая программа, которая делает то же самое:

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])));
    } 
}
1 голос
/ 17 февраля 2010

Ну, во-первых, вы вызываете System.out.println(), который возвращает void, и пытаетесь вернуть это как String в вашей функции reverseCheck (). Решите: хотите ли вы напечатать результат или вернуть его (возможно, как bool)?

0 голосов
/ 17 февраля 2010

Это не объясняет, что не так с вашим кодом (это уже объяснили другие), но почему бы вам не попробовать использовать это вместо:

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;
    }
}
0 голосов
/ 17 февраля 2010

StringBuffer имеет обратный метод, поэтому он должен работать:

public static boolean checkForPalindrom(String s){
    StringBuffer buf=new StringBuffer(s);
    return s.equals(buf.reverse().toString());
}
0 голосов
/ 17 февраля 2010
return System.out.println("It is not a palindrome");

println ничего не возвращает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...