#java #interface #compareto
#java #интерфейс #compareto
Вопрос:
Привет всем, я застрял на сравнении общих типов в Java.
public class Odev1LinkedList<T extends Comparable<T>> extends AbstractLinkedList<T>{
/**
* Bir listede elemanları uygun konuma ekler. Boş bir listeye elemanlar eklendikten
* sonra küçükten büyüğe sıralı olur
* @param value eklenecek değer
*/
@Override
public void insertInOrder(T value) {
Node current = this.getHead();
Node previous = new Node<>(null,null);
if(current == null){
addFirst(value);
return;
}
while(current != null){
if(current.value >= value){
if(current == this.getHead()){
addFirst(value);
return;
}
Node newNode = new Node<>(value,current);
previous.next = newNode;
return;
}else if(current.next == null){
addLast(value);
return;
}
previous = current;
current = current.next;
}
}
Я застрял на этой строке, если (current.value> = value) … Поскольку иногда мое значение приходит строкой, иногда приходит целым числом, этого блока достаточно для сравнения целого числа, но не подходит для строки, как я могу решить эту проблему.
Мои методы работают как добавление узла по порядку -> Если у вас есть такой связанный список {1,2,4} и когда вы используете этот метод для добавления нового узла, значение которого равно 3. Ваш последний связанный список должен быть таким {1,2,3,4}
{1,2,3,4} -> inserInOrder(5) -> {1,2,3,4,5}
{1,2,3,4} -> inserInOrder(0) -> {0,1,2,3,4}
{1,2,3,4} -> inserInOrder(2) -> {1,2,2,3,4}
И мне нужно сделать то же самое для списка, связанного со строкой. -> {«A», «B»,»D»} ; inserInOrder(«C») -> {«A», «B»,»C», «D»}
Комментарии:
1. Вы смотрели
Comparable
документацию?2.
if(current.value.compareTo(value) >= 0){
3. я не могу достичь метода compareTo
4. Пожалуйста, предоставьте определение класса
Node
.5. я не меняю определение узла, оно хранится на сервере моего учителя
Ответ №1:
Я думаю, вы можете использовать блок «try-catch». Во-первых, в блоке «try» вы пытаетесь присвоить свое значение переменной типа String . Если все в порядке, то ваш код выполняется дальше, где вы пишете сравнение соответствия строковой логике. Но если это не так, то генерируется ClassCastException, которое перехватывается блоком «catch», в котором, в свою очередь, вы пытаетесь присвоить значение переменной типа if Integer, а затем выполнить требуемую логику. Что-то вроде этого:
try {
String variable = value
//String logic
} catch (Exception ClassCastException) {
int variable = value
//Integer logic
}