Как исправить код, чтобы вывод был палиндромом или нет - PullRequest
0 голосов
/ 02 июня 2019

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

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

  File file = new File("dictionary.txt");
  Scanner INPUT = new Scanner(file); 

  while (INPUT.hasNextLine()) {      

         String forward = INPUT.nextLine(); String reverseText = forward;

        for(int i = forward.length() - 1; i >= 0; i--)
        reverseText += forward.charAt(i);

    if (reverseText.equals(forward))     
        System.out.println(forward + " is a palindrome");        
    else    
        System.out.println(forward + " is not a palindrome");
    }     

Я посмотрел несколько видео на YouTube и прочитал много фрагментов кода.Я новичок в Java, но, похоже, код палиндрома правильный.Так проблема в чтении файла?

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Ваш код может быть исправлен, но я бы сказал, что это плохой алгоритм и его следует заменить. У вас недостаточно места в том, что вам не нужно создавать целую обратную строку. И у вас есть временная неэффективность, так как известно, что это слово не является палидромом, как только возникает несоответствие букв, вся дальнейшая обработка тратится впустую. Рассмотрим вместо этого:

File file = new File("dictionary.txt");
Scanner input = new Scanner(file);

outer: while (input.hasNextLine())
{
    String word = input.nextLine().toLowerCase().trim();

    for (int i = 0, j = word.length() - 1; j > i; i++, j--)
    {
        if (word.charAt(i) != word.charAt(j))
        {
            System.out.println(word + " is not a palindrome");
            continue outer;
        }
    }

    System.out.println(word + " is a palindrome");
}
0 голосов
/ 02 июня 2019

Вам нужно установить первую переменную в пустую строку, а затем добавить к ней. Кроме того, вам нужно будет вводить строчную строчную букву, в противном случае сравнение с равными будет учитывать заглавные буквы (например, Redder ≠ reddeR). Еще одна вещь, которую следует учитывать, это удаление пробелов (пробел и табуляция в конце строки), так как это испортит сравнение.

        File file = new File("dictionary.txt");
        Scanner INPUT = new Scanner(file);

        while (INPUT.hasNextLine()) {

            String forward = INPUT.nextLine().toLowerCase().trim();
            String reverseText = "";

            for(int i = forward.length() - 1; i >= 0; i--)
                reverseText += forward.charAt(i);

            if (reverseText.equals(forward))
                System.out.println(forward + " is a palindrome");
            else
                System.out.println(forward + " is not a palindrome");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...