Java Poem Palindrome Checker: перебирайте элементы в массиве по порядку - PullRequest
0 голосов
/ 17 сентября 2018

В данный момент пытаюсь запрограммировать поэму палиндрома на проверку.Это специально не для палиндромов, а в том, что в массиве есть слова в одинаковом порядке в обоих направлениях.Например, следующее стихотворение палиндром

Life-
imitates nature,
always moving, traveling continuously.
Continuously traveling, moving always,
nature imitates
life

Моя проблема заключается в переборе массива для соответствия первому и последнему элементам, поскольку в настоящее время он сравнивает вещи в неправильном порядке.

Мой кодвыглядит следующим образом:

import java.util.Scanner;
import java.io.*;
public class WordPalindromeTest {

    public static void main(String[] args) {
        System.out.println("This program determines if an entered sentence/word poem is a palindrome.");
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter a string to determine if it is a palindrome: ");
        while(input.hasNextLine()) {
            String palin = input.nextLine();
            if(palin.equals("quit")) {
                break;
            }
            else {
                boolean isPalin = isWordPalindrome(palin);
                if(isPalin == true) {
                    System.out.println(palin + " is a palindrome!");
                    }
                    else
                        System.out.println(palin + " is NOT  a palindrome!");
                }
            }

        System.out.println("Goodbye!");
        input.close();

    }

    public static boolean isWordPalindrome(String s) {
        boolean isWordPal = false;
        String lowerCase = s.toLowerCase();
        String replaced = lowerCase.replaceAll("[^a-zA-Z0-9\\s]", "");
        String words[] = replaced.split(" ");
        for(int i = 0; i < words.length; i++) {
            for(int j = 0; j < words.length; j++) {
                if (words[i].equals(words[j]) && i != j) {
                    isWordPal = true;
                }
                else
                    isWordPal = false;
            }
        }
        return isWordPal;
    }
}

С конкретным вопросом является

public static boolean isWordPalindrome(String s) {
        boolean isWordPal = false;
        String lowerCase = s.toLowerCase();
        String replaced = lowerCase.replaceAll("[^a-zA-Z0-9\\s]", "");
        String words[] = replaced.split(" ");
        for(int i = 0; i < words.length; i++) {
            for(int j = 0; j < words.length; j++) {
                if (words[i].equals(words[j]) && i != j) {
                    isWordPal = true;
                }
                else
                    isWordPal = false;
            }
        }
        return isWordPal;
    }

Я не понимаю, как правильно настроить цикл для сравнения правильных элементов.Он должен сравнивать первый элемент с последним, второй со вторым с последним и т. Д., Пока цикл не закончится.Я понимаю, мне нужно сравнить первое с целым массивом, прежде чем двигаться дальше.

1 Ответ

0 голосов
/ 17 сентября 2018

Это похоже на домашнее задание, поэтому я не дам вам рабочего решения. Но это так:

-Тебе не нужны две петли. Вам нужно только сравнить первое с последним, второе со вторым с последним и т. Д. (Совет: если вы вычтете i-1 из длины Array, вы получите соответствующий элемент в i, что вам нужно сравнить с). Также вам нужно всего лишь перебрать половину длины Array

-Если когда-либо isWordPal станет ложным, вам нужно return ложно. В противном случае он может быть перезаписан и в конце вернет true.

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