Java诗歌回文检查器:按顺序遍历数组匹配元素

Java诗歌回文检查器:按顺序遍历数组匹配元素,java,arrays,loops,palindrome,Java,Arrays,Loops,Palindrome,目前正在尝试编写一个诗歌回文检查器。这并不是专门针对回文,而是数组中的单词在两种方式下的顺序相同。例如,下面是一首回文诗 Life- imitates nature, always moving, traveling continuously. Continuously traveling, moving always, nature imitates life 我的问题是遍历数组以匹配第一个和最后一个元素,因为当前它以错误的顺序进行比较 我的代码如下: import java.util.Sc

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

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;
    }
}
import java.util.Scanner;
导入java.io.*;
公共类字回文测试{
公共静态void main(字符串[]args){
System.out.println(“此程序确定输入的句子/单词诗是否为回文”);
扫描仪输入=新扫描仪(System.in);
System.out.println(“请输入一个字符串以确定它是否是回文:”;
while(input.hasNextLine()){
字符串palin=input.nextLine();
如果(佩林等于(“退出”)){
打破
}
否则{
布尔值isPalin=isWordPalindrome(palin);
如果(isPalin==true){
System.out.println(佩林+“是一个回文!”);
}
其他的
System.out.println(palin+“不是回文!”;
}
}
System.out.println(“再见!”);
input.close();
}
公共静态布尔值isWordPalindrome(字符串s){
布尔值isWordPal=false;
String lowerCase=s.toLowerCase();
字符串替换=小写.replaceAll([^a-zA-Z0-9\\s],”);
字符串[]=替换。拆分(“”);
for(int i=0;i
具体问题是

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静态布尔值isWordPalindrome(字符串s){
布尔值isWordPal=false;
String lowerCase=s.toLowerCase();
字符串替换=小写.replaceAll([^a-zA-Z0-9\\s],”);
字符串[]=替换。拆分(“”);
for(int i=0;i

我对如何正确设置循环以比较正确的元素感到困惑。它应该将第一个元素与最后一个元素进行比较,第二个元素与第二个元素与最后一个元素进行比较,等等,直到循环完成。我意识到在继续之前,我已经将第一个数组与整个数组进行了比较。

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

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


-如果
isWordPal
变为false,则需要
return
false。否则它可能会被覆盖,并在最后返回true

另一个技巧是,您只需要运行一个循环来迭代数组的一半length@CaiusJard没错。我把它编辑成英文。谢谢你的建议!我认为使用两个循环是不正确的。减法是在循环声明期间进行,还是在if语句之后进行
for(inti=0;i
或说
if(words[i].equals(words[words.length-(i-1))
谢谢你的帮助!@gblodgett Ps如果有人因为这个答案给你打分,不要惊讶,因为纯粹是“为他们做家庭作业”感觉,这不是一个答案。我支持你鼓励自我思考和学习,顺便说一句,但在某个时候肯定会有一些抱怨的纯粹主义者。:@gblodget谢谢你的帮助!弄明白了。做了一个if语句检查,并修复了我的返回语句。
if(words[I]!=words[words.length-1-I]){return false;}
。我不小心把单词打错了,这让我有点吃惊……再次感谢你!你的代码中最大的错误是没有注释。你应该先在注释中用英语编写你的算法。然后你应该在注释后将其翻译成代码。保留注释。代码应该被记录,或者自我记录(少数程序员具备的技能)顺便说一句,它是写出来的,或者是在评论中解释的。比如,如果你展示了工作原理,你可以在充满错误答案的考试中获得90%的分数。你是这项运动的新手,可能还没有用代码思考。复杂的算法应该总是用你所用的语言编写,然后翻译成你正在学习的语言。