我创建了一个从文件中读取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"
}
}
答案 0 :(得分:1)
尝试以下(非常简单)。阅读代码中的注释,了解其工作原理。
<强>代码:强>
public static void main(String[] args)
{
int[] a = { 1, 2, 3 };
int[] b = { 1, 2, 1 };
int[] c = { 1, 2, 2, 1 };
int[] d = { 1, 2, 3, 1 };
int[] e = { 1 };
System.out.println(is_palindrome(a));
System.out.println(is_palindrome(b));
System.out.println(is_palindrome(c));
System.out.println(is_palindrome(d));
System.out.println(is_palindrome(e));
}
public static boolean is_palindrome(int[] arr)
{
for (int i = 0; i < arr.length / 2; i++) { // Check just half times the size of 'arr'
// System.out.println(arr[i] + " - " + arr[arr.length - i - 1]); // Debug
if (arr[i] != arr[arr.length - i - 1]) // Check 'first' with 'last', 'second' with 'last - 1' ...
return false;
}
return true;
}
<强>输出:强>
false
true
true
false
true
答案 1 :(得分:0)
我认为你要确定的是整数的整数列表是否是回文。通过展平,我的意思是,如果你展平[(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步。