EDIT: С вашей помощью мне удалось исправить мою проблему. Я редактировал мой код, чтобы показать, как я должен был настроить его, чтобы он работал.
В настоящее время у меня возникают проблемы с кодированием части, которая сравнивает содержимое двух итераторов. В рамках требований для моего задания мне нужно использовать связанный список для хранения отдельных символов введенной строки. Я дошел до того, что у меня есть два итератора, которые будут содержать входной путь в обратном направлении.
String palindrom = input.getText();
String [] chara = palindrom.split (""); //this is successfully splitting them, tested.
int length = palindrom.length( ); // length == 8
System.out.println (length); //can use this for how many checks to do?
LinkedList ll = new LinkedList(Arrays.asList(chara));
Iterator iterator = ll.iterator();
Iterator desIterator = ll.descendingIterator();
/*while(iterator.hasNext() ){
System.out.println(iterator.next() );
}
while(desIterator.hasNext() ){
System.out.println(desIterator.next() );
}*/
boolean same = true;
while(iterator.hasNext()){
if(!iterator.next().equals(desIterator.next())){
same = false;
break;
}
}
И используя System.out, я вижу, что они хранятся правильно, но я не знаю, как проверить, сохраняют ли итераторы то же содержимое. Что было бы одним из простейших методов для сравнения двух итераторов или преобразования их в нечто, что я могу сравнить? Чтобы уточнить, я хочу проверить, что они содержат одни и те же элементы в том же порядке.
boolean same = true;
while(iterator.hasNext()){
if(!desIterator.hasNext() || !iterator.next().equals(desIterator.next())){
same = false;
break;
}
}
System.out.println(same);
Вам нужно перебирать оба итератора одновременно, т.е. С одним циклом. Вот общая функция сравнения (0 при равном, <0, когда A <B,> 0 при A> B):
static <T extends Comparable<S>, S> int compare(Iterator<T> a, Iterator<S> b) {
while (a.hasNext() && b.hasNext()) {
int comparison = a.next().compareTo(b.next());
if (comparison != 0) {
return comparison;
}
}
if (a.hasNext())
return 1;
if (b.hasNext())
return -1;
return 0;
}
Чтобы просто проверить, равны ли они, это можно упростить:
static <T, S> boolean equals(Iterator<T> a, Iterator<S> b) {
while (a.hasNext() && b.hasNext()) {
if (!a.next().equals(b.next())) {
return false;
}
}
if (a.hasNext() || b.hasNext()) {
// one of the iterators has more elements than the other
return false;
}
return true;
}
Guava реализует это как Iterators.elementsEqual.