Java Poem Palindrome Checker:按顺序迭代数组匹配元素

问题描述 投票:0回答:1

目前正在尝试编写诗歌Palindrome检查器。这不是专门用于回文,而是数组在两个方面都有相同顺序的单词。例如,以下是诗歌回文

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

我对如何正确设置循环以比较正确的元素感到困惑。它应该将第一个元素与最后一个元素进行比较,将第二个元素与第二个元素进行比较,等等,直到循环结束。我意识到我要先将它与第一个到整个阵列进行比较,然后继续前进。

java arrays loops palindrome
1个回答
1
投票

这似乎是一项家庭作业,所以我不会给你一个有效的解决方案。但是这样的话:

- 你不需要两个循环。你只需要比较第一个到最后一个,第二个到第二个到最后一个,等等。(提示:如果你从i-1的长度中减去Array,你将得到你需要比较的i的相应元素) 。你也只需要迭代Array长度的一半

- 如果isWordPal变得虚假,你需要return假。否则它可能会被覆盖,最后它将返回true。

© www.soinside.com 2019 - 2024. All rights reserved.