首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java Poem回文检查器:按顺序迭代数组匹配元素

Java Poem回文检查器:按顺序迭代数组匹配元素
EN

Stack Overflow用户
提问于 2018-09-17 06:27:43
回答 1查看 240关注 0票数 0

目前正在尝试编写一个诗歌回文检查器。这不是专门针对回文的,而是数组中的单词在两种情况下的顺序都是相同的。例如,下面是一首回文

代码语言:javascript
复制
Life-
imitates nature,
always moving, traveling continuously.
Continuously traveling, moving always,
nature imitates
life

我的问题是通过迭代数组来匹配第一个和最后一个元素,因为目前它以错误的顺序比较事物。

我的代码如下:

代码语言:javascript
复制
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;
    }
}

具体的问题是

代码语言:javascript
复制
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;
    }

我对如何正确地设置循环来比较正确的元素感到困惑。它应该比较第一个元素和最后一个元素,比较第二个元素和倒数第二个元素,依此类推,直到循环结束。我意识到我让它在继续之前将第一个数组与整个数组进行比较。

EN

回答 1

Stack Overflow用户

发布于 2018-09-17 06:37:50

这看起来像是家庭作业,所以我不会给你一个可行的解决方案。但它是这样的:

-You不需要两个循环。您只需要比较第一个和最后一个,第二个和第二个到最后一个,依此类推(提示:如果从Array的长度中减去i-1,就会得到需要比较的i的相应元素)。此外,您只需要迭代超过Array长度的一半

isWordPal变为false时,你需要return false。否则,它可能会被覆盖,并在结束时返回true。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52358900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档