哪位高手帮我看一下这道java题。
- 提问者网友:温柔港
- 2021-06-02 14:20
- 五星知识达人网友:荒野風
- 2021-06-02 15:17
有一个大括号位置有问题,另外,CharList类的构造逻辑有问题,应该使用私有变量head而不应该使用过程作用域变量ListCell head
----------
输出结果是下面的么?
a+=(A B D E F)
(B D E F)
a+=(A B C D E F)
a+=(C D F)
a+=(D F)
link+=(a u s)
link+=(a u e w s)
- 1楼网友:轻熟杀无赦
- 2021-06-02 15:40
在CharList类的最后少了一个},导致无法编译,
加上}后编译通过,运行报找不到main方法,原因是public 类是CharList,而非TestCharList,因此把main方法放回CharList类中;
再次编译运行,执行到a.insert('C',lp);时报空指针异常,原因是a.putOn('A')时把B元素替换了,在CharList里找不到B,导致lp为空指针,于是将本句注释。。
请看黑体部分:
class ListCell { public ListCell(char c, ListCell cell) { item=c; next=cell; }
char content() { return item; }
char item='\0';
ListCell next=null; }
public class CharList { public CharList() {}
public CharList(char c) { ListCell head = new ListCell(c,null); }
public ListCell first() { return head; }
public boolean isEmpty() { return head==null; }
private ListCell head=null;
public ListCell last() { ListCell p=head; while(p!=null&&p.next!=null) p=p.next; return p; }
public ListCell find(char c) { for(ListCell p=head;p!=null;p=p.next) if(p.item==c) return p; return null; }
public boolean substitute(char r,char s) { ListCell p=find(s); if(p==null) return false; p.item=r; return true; }
public int shorten(int n) { while(head!=null&&n-->0) head=head.next; return -n; }
public int remove(char c) { ListCell p=head; int count=0; if(p==null) return count; while(p.next!=null) { if((p.next).item==c) { count++; p.next=(p.next).next; } else p=p.next; } if(head.item==c) { head=head.next; count++; } return count; }
public void putOn(char c) { head=new ListCell(c,head);}
public void insert(char c, ListCell e) { e.next=new ListCell(c,e.next);}
public void append(char c) { insert(c,last());}
public String toString() { return toString(head);}
public String toString(ListCell p) { String s="("; while(p!=null) { s=s+p.item; if((p=p.next)!=null) s=s+" "; } return s+")";
}
//} //class TestCharList //{ public static void main(String[] args) { CharList a=new CharList('B'); a.putOn('A'); // 这里把原来的B覆盖了 a.append('D');a.append('E');a.append('F'); System.out.println("a+="+a); ListCell lp=a.find('B'); // 此时找不到B,lp为空 System.out.println(a.toString(lp)); //a.insert('C',lp); // 由于lp为空 这里会报错 System.out.println("a+="+a); a.remove('E'); a.shorten(2); System.out.println("a+="+a); a.remove('C'); System.out.println("a+="+a);
CharList link=new CharList('s'); link.putOn('u'); link.putOn('a'); System.out.println("link+="+link); ListCell l=link.find('u'); link.insert('e',l); ListCell p=link.find('e'); link.insert('w',p); System.out.println("link+="+link);
} }