Java Poem Palindrome Checker: Itérer à travers les éléments de correspondance de tableau dans l'ordre


Actuellement en train d'essayer de programmer un vérificateur de Palindrome de poème. Ce n'est pas pour les palindromes spécifiquement, mais que le tableau a des mots dans le même ordre dans les deux sens. Par exemple, ce qui suit est un poème palindrome

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

Mon problème consiste à parcourir le tableau pour faire correspondre le premier et le dernier éléments, car il compare actuellement les choses dans le mauvais ordre.

Mon code est le suivant:

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;
    }
}

Avec le point spécifique en question étant

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;
    }

Je suis confus sur la façon de configurez correctement la boucle pour comparer les bons éléments. Il devrait comparer le premier élément au dernier, le second à l'avant-dernier, etc. jusqu'à ce que la boucle soit terminée. Je me rends compte que je l'ai comparer le premier à l'ensemble du tableau avant de passer à autre chose.

Author: Swinda, 2018-09-17

1 answers

Cela semble être un devoir, donc je ne vous donnerai pas de solution de travail. Mais ceci comme ceci:

-Vous n'avez pas besoin de deux boucles. Il vous suffit de comparer le premier au dernier, le second à l'avant-dernier, etc. (Astuce: si vous soustrayez i-1 de la longueur du Array, vous obtiendrez l'élément correspondant à i auquel vous devez comparer). De plus, vous n'avez besoin que d'itérer plus de la moitié de la longueur du Array

- Si jamais isWordPal devient faux, vous devez return faux. Sinon, il pourrait être écrasé et à la fin, il retournera true.

 1
Author: GBlodgett, 2018-09-16 22:42:40