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 楼答案
我想你要确定的是整型列表是否是回文。通过展平,我的意思是如果你展平
[(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)
中:vectors
的前半部分推到堆栈上李>vectors
的后半部分排在队列中,反向李>x = q.remove()
和y = s.pop()
,直到没有更多元素。如果你仔细想想,平铺列表成为回文的唯一方法是,如果x
和y
只是整数列表,它们是相反的李>你可以从那里拿走。我可以想出几种方法来实现这一点,尤其是第3步