這是一個學校的家庭作業實驗室。我試圖扭轉一個LinkedList,並檢查它是否是一個迴文(相同的後退和前進)。我在網上看到了類似的問題,但沒有多少幫助我解決這個問題。我製作了一些程序來檢查迴文,但沒有檢查數組或列表。因此,首先,這是我isPalindrome方法:isPalindrome - 收集和列表反轉
public static <E> boolean isPalindrome(Collection<E> c) {
Collection<E> tmp = c;
System.out.println(tmp);
Collections.reverse((List<E>) c);
System.out.println(c);
if(tmp == c) { return true; } else { return false; }
}
我的教授要我們設置方法爲接受所有集合這就是爲什麼我用收集並投它作爲反向方法的名單,但我米不知道這是否正確完成。我知道它確實顛倒了名單。這是我的主要方法:
public static void main(String...strings) {
Integer[] arr2 = {1,3,1,1,2};
LinkedList<Integer> ll2 = new LinkedList<Integer>(Arrays.asList(arr2));
if(isPalindrome(ll2)) { System.out.println("Successful!"); }
}
的問題是,我有一個數組,它是不是一個迴文測試這一點,這意味着它不向後一樣,因爲它是前鋒。我已經使用數組{1,3,1}對其進行了測試,並且它正常工作,因爲這是一個迴文。使用{1,3,1,1,2}仍然會爲迴文返回true,但顯然不是。下面是使用{1,3,1,1,2}陣列我的輸出:
[1, 3, 1, 1, 2]
[2, 1, 1, 3, 1]
Successful!
所以,這似乎是正確的扭轉名單,但是當它們進行比較,它假定他們是平等的嗎?我相信tmp == c有一個問題,它是如何檢查它們是否相等。我認爲它只是檢查它是否包含相同的元素,但我不確定。我也試過tmp.equals(c),但它返回了相同的結果。我只是好奇,是否有另一種方法,我可以使用或者我必須編寫一個方法來比較tmp和c?
預先感謝您! 湯米
首先,如果'收藏C'不是'List',當您執行'(列表)c'時,您將遇到'ClassCastException'。 –
cheb1k4
@ cheb1k4有沒有一種方法可以讓Collections.reverse()接受一個Collection? –
不,你不能,'Collections.reverse'只接受一個'List'。你必須找到另一種方式。也許你可以用https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#reverseOrder() – cheb1k4