有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java检查多个向量是否是回文的?

我创建了一个程序,从文件中读取String,并检查它是否是回文。现在我需要改变它来检查向量是否是回文。我必须创建几个向量并检查它们是否是回文。假设我有以下向量

(1,2,3), (1,1,1), (2,2,2), (2,2,2), (1,1,1), (1,2,3)

程序将使用两个迭代器,并检查第一个迭代器是否等于最后一个,第二个迭代器是否等于第二个迭代器,依此类推。这是我的String输入程序:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.Vector;

public class Project4
{
    public static void main(String[] args) throws IOException
    {
        Vector v1 = new Vector(3);
        Vector v2 = new Vector(3);
        Vector v3 = new Vector(3);
        Vector v4 = new Vector(3);
        ArrayList vectors = new ArrayList();
        v1.add(1);
        v1.add(2);
        v1.add(3);
        v2.add(1);
        v2.add(1);
        v2.add(1);
        v3.add(1);
        v3.add(1);
        v3.add(1);
        v4.add(1);
        v4.add(2);
        v4.add(3);
        vectors.add(v1);
        vectors.add(v2);
        vectors.add(v3);
        vectors.add(v4);
        if (isPalindrome(vectors))// If true, it's a palindrome
            System.out.println("That is a palindrome.");
        else // otherwise, it's not
            System.out.println("That is not a palindrome.");

    }
    public static boolean isPalindrome(ArrayList vectors)
    {
        // Make a new queue, stack, and character object
        Queue<Vector> q = new LinkedList<>();
        Stack<Vector> s = new Stack<>();
        for(int i = 0; i < vectors.size(); i++){
            q.add((Vector) vectors.get(i));
            s.add((Vector) vectors.get(i));
        }
        Vector temp = new Vector();
        int mismatches = 0;
        for (int i = 0; i < vectors.size(); i++)
        {
            temp = (Vector) vectors.get(i);
            if (vectors.get(i).equals(vectors.get(i)))
            {
                q.add(temp);
                s.push(temp);
            }
        }

        while (!q.isEmpty())
        {
            if (q.remove() != s.pop())
                mismatches++; // Increment "mismatches" if q != s
        }

        return (mismatches == 0); // will return true if the method did not change the variable "mismatches"
    }
}

共 (1) 个答案

  1. # 1 楼答案

    我想你要确定的是整型列表是否是回文。通过展平,我的意思是如果你展平[(3, 2, 1), (1, 2, 1), (1, 2, 3)],它会变成[3, 2, 1, 1, 2, 1, 1, 2, 3](你可以看到它是一个回文)

    你的代码有问题。举个例子,为什么还要检查vectors.get(i).equals(vectors.get(i))?这将永远是正确的

    这个问题有家庭作业的味道,所以我不会给你们一个实现,但我会概述一个

    isPalindrome(ArrayList vectors)中:

    1. vectors的前半部分推到堆栈上
    2. vectors的后半部分排在队列中,反向
    3. 比较x = q.remove()y = s.pop(),直到没有更多元素。如果你仔细想想,平铺列表成为回文的唯一方法是,如果xy只是整数列表,它们是相反的

    你可以从那里拿走。我可以想出几种方法来实现这一点,尤其是第3步