Java 在linkedlist中查找大写字母并返回包含已找到元素的新linkedlist?
我必须编写一个方法来搜索LinkedListNode,每个listnode共包含一个字符,查找所有大写字符,将它们复制到新的listnode并返回新的listnode。到目前为止,这是我的代码,但它没有通过教授提供的JUnit测试 这是列表节点:Java 在linkedlist中查找大写字母并返回包含已找到元素的新linkedlist?,java,eclipse,algorithm,list,linked-list,Java,Eclipse,Algorithm,List,Linked List,我必须编写一个方法来搜索LinkedListNode,每个listnode共包含一个字符,查找所有大写字符,将它们复制到新的listnode并返回新的listnode。到目前为止,这是我的代码,但它没有通过教授提供的JUnit测试 这是列表节点: public class ListNode { public char element; public ListNode next; } 这就是我写的方法,它似乎不起作用: public static ListNode copyU
public class ListNode {
public char element;
public ListNode next;
}
这就是我写的方法,它似乎不起作用:
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;
}
代码是怎么回事?为什么失败?您需要在某个地方创建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;
}
您需要在某处创建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;
}
扩展@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;
}
扩展@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;
}
作为预防措施,这将导致列表末尾出现一个空节点。我不知道这是否是一个问题,只是想指出XabidrXa7px,这是字符串,它将在ListNode中变成char元素。运行copyUpperCase方法后,它只返回RA。它不应该返回XIRXAX吗?这是为什么?我明白了,我认为@dcharms+1会是个问题,因为我扩展了你的答案,我讨厌别人狙击接近的人的点。作为预防措施,这将导致列表末尾出现一个空节点。我不知道这是否是一个问题,只是想指出XabidrXa7px,这是字符串,它将在ListNode中变成char元素。运行copyUpperCase方法后,它只返回RA。它不应该返回XIRXAX吗?这是为什么?我明白了,我认为@dcharms+1会是个问题,因为我扩展了你的答案,我讨厌人们从亲密的人那里狙击点。