Я должен написать метод, который будет искать связанный список (ListNode, соединяя один символ в список), находить все символы верхнего регистра, копировать их в новый ListNode и возвращать новый ListNode. Это мой код до сих пор, но он не прошел тестирование JUnit (предоставлено профессором).
Это узел списка:
public class ListNode {
public char element;
public ListNode next;
}
И это метод, который написал ive, который, похоже, не работает:
public static ListNode copyUpperCase(ListNode head) {
ListNode newListNode = mkEmpty();
if(head == null){
throw new ListsException("Lists: null passed to copyUpperCase");
}else{
char[] sss = toString(head).toCharArray();
for(int i = 0; i < sss.length ; i++ )
if(Character.isUpperCase(sss[i])){
newListNode.element = sss[i];
}
newListNode = newListNode.next;
}
return newListNode;
}
Что происходит с кодом? Почему это терпит неудачу?
Расширяясь в ответ @enterbios (+1 для него), попробуйте следующее:
public static ListNode toUpperCase(ListNode head) {
if (head == null)
throw new ListsException("Lists: null passed to copyUpperCase");
ListNode newHead = null;
ListNode current = null;
char[] sss = toString(head).toCharArray();
for (int i=0; i<sss.length; i++) {
if (Character.isUpperCase(sss[i])) {
if (current == null) {
current = mkEmpty();
newHead = current;
} else {
current.next = mkEmpty();
current = current.next;
}
current.element = sss[i];
}
}
return newHead;
}
Вам нужно создать newListNode.next где-нибудь. Я не вижу его в предоставленном фрагменте кода. Попробуйте изменить свой метод:
public static ListNode copyUpperCase(ListNode head) {
ListNode newListNode = mkEmpty();
ListNode newHead = newListNode; //KEEP HEAD OF NEW LINKED LIST
if(head == null){
throw new ListsException("Lists: null passed to copyUpperCase");
}else{
char[] sss = toString(head).toCharArray();
for(int i = 0; i < sss.length ; i++ )
if(Character.isUpperCase(sss[i])){
newListNode.element = sss[i];
newListNode.next = mkEmpty(); //CREATE NEW INSTANCES INSIDE LOOP
newListNode = newListNode.next; //MOVING FORWARD TO NEXT NODE, newListNode is the last node of new linked list
}
}
return newHead;
}