我有一个类Palindrome
,它有两个方法,一个方法public Deque<Character> wordToDeque(String word)
将一个字符串转换为Deque,另一个方法,public boolean isPalindrome(String word)
接收一个字符串,将其转换为Deq,并查看字符串是否为Palindrome。这是我的Palindome类代码:
import java.util.Comparator;
import java.util.Deque;
import java.util.Iterator;
import java.util.Objects;
public class Palindrome {
public Deque<Character> wordToDeque(String word) {
Deque<Character> L = new LinkedListDeque<>();
for (int x = 0; x < word.length()-1; x++) {
L.add(word.charAt(x));
}
return L;
}
public boolean isPalindrome(String word) {
Deque<Character> L = new LinkedListDeque<>();
for (int x = 0; x < word.length()-1; x++) {
L.add(word.charAt(x));
}
Iterator<Character> A = L.descendingIterator();
Iterator<Character> B = L.iterator();
while (A.hasNext() && B.hasNext()) {
if (Objects.equals(A,B)) {
return true;
} else {return false;}
}
return false;
现在基于此,我尝试测试另一个类TestPalindrome
中的一些用例,该类包含Palindrome类的一些测试用例。
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class TestPalindrome {
// You must use this palindrome, and not instantiate
// new Palindromes, or the autograder might be upset.
static Palindrome palindrome = new Palindrome();
@Test
public void testWordToDeque() {
Deque<Character> d = palindrome.wordToDeque("persiflage");
String actual = "";
for (int i = 0; i < "persiflage".length(); i++) {
actual += d.removeFirst();
}
assertEquals("persiflage", actual);
}
}
* /
然而,由于在Deque<Character> d = palindrome.wordToDeque("persiflage");
中实现Deque时出错,我的TestPalindrome类似乎无法运行。我正在试图找出问题所在,但似乎无法调试。如有任何帮助,我将不胜感激。
错误消息显示:
Incompatible types. Found: 'java.util.Deque<java.lang.Character>', required: 'Deque<java.lang.Character>'
Operator '+' cannot be applied to 'java.lang.String', 'void'
注:这里是我在代码中使用的一些额外接口,以防对调试有帮助。
接口Deque:
Interface Deque<T> {
void addFirst(T items);
void addLast(T items);
String toString();
void removeLast();
void removeFirst();
void get(int index);
int size();
boolean isEmpty();
}
接口CharacterComparator:
public interface CharacterComparator<T>{
boolean equalChars(char x, char y);
}
1条答案
按热度按时间mqxuamgl1#
您使用**运算符“+”**得到的错误是由于
Deque<T>
接口中的removeFirst()
操作返回void
,这意味着当您对testWordToDeque()
方法执行以下行时,它将产生您指定的错误:要解决这个问题,您应该将
removeFirst()
的返回类型更改为T
,并且您选择的类型应该覆盖toString()
方法,在本例中是Character
类。此外,来自同一接口的操作
removeLast()
和get()
也不应该是空的。。如果不希望“remove”操作返回值,请将其保留为
void
,并在更改返回类型后使用其他方法,如get()
。