第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 BinarySearchTree 中獲取前任的問題

在 BinarySearchTree 中獲取前任的問題

慕桂英3389331 2021-10-17 16:59:54
這是我的 getBefore 方法 public Node getBefore() {    return getBeforeHelper(root, this.data);}public Node getBeforeHelper(Node node, K key) {    Node current = null;    if(node != null) {        if(node.data == key) {            if(node.left != null) {                current = node.left;                while(current.right != null) {                    current = current.right;                }                System.out.println(current.get());                return current;            }        }        else if(lessThan.test(key, node.data)) {            return getBeforeHelper(node.left, key);        }        else if(lessThan.test(node.data, key)) {            return getBeforeHelper(node.right, key);        }    }    else {        return null;    }    return current;}這是它未能通過的 Junit 測(cè)試@Testpublic void beforeBST() {BinarySearchTree<Integer> bst = new BinarySearchTree<>((Integer x, Integer y) -> x < y);assertTrue(bst.isEmpty());int[] a = new int[] { 12, 4, 18, 5, 11, 8, 15, 9, 17, 20, 3, 13, 19, 2, 14, 7, 6, 10, 1, 16 };int n = a.length;for (Integer key : a)   bst.insert(key);assertNull(bst.search(1).getBefore());for (int i = 2; i <= n; i++) {    System.out.println(bst.search(2).getBefore());    assertTrue(i - 1 == bst.search(i).getBefore().get());}}它在最后一個(gè) for 循環(huán)中到達(dá) assertTrue,然后因空指針異常而失敗。為什么會(huì)拋出空指針?
查看完整描述

2 回答

?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊

當(dāng) getBeforeHelper 方法找到帶有您的鍵的元素時(shí),它會(huì)嘗試獲取左邊的元素。如果您的左元素不存在,那將不起作用。在這種情況下,getBeforeHelper 返回為 null 的“current”。在這種情況下,您對(duì)該空元素調(diào)用 get() 并獲得空指針異常。


查看完整回答
反對(duì) 回復(fù) 2021-10-17
?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊

看起來您最終會(huì)遇到以下情況:


//                             this yields null

//                               v          v

assertTrue(i - 1 == bst.search(i).getBefore().get());

//                                           ^    ^

//                   attempt to access a method belonging to a null reference

考慮以下情況,在 中g(shù)etBeforeHelper,您有:


node != null(總是true在引起麻煩的測(cè)試中)

node.data == key(true當(dāng)您到達(dá)Node您正在尋找的位置時(shí))

node.left == null (想想看:什么時(shí)候會(huì)發(fā)生?)

在這種情況下,您實(shí)際上最終得到了該getBeforeHelper方法的以下主體(通過丟棄else您通過if測(cè)試的所有塊并丟棄if測(cè)試失敗的塊的所有內(nèi)容):


public Node getBeforeHelper(Node node, K key) {

    Node current = null;

    if(node != null) { // true

        if(node.data == key) { // true

            if(node.left != null) { // false

            }

        }

    }


    return current;

}

嗯,就在那里,你回來了null。

稍后,嘗試null.get()在您的斷言中進(jìn)行評(píng)估。


剩下要做的就是了解這種情況究竟何時(shí)發(fā)生并找到另一種非失敗的方法來處理它!我在上面給出了一些提示,但既然你真的在學(xué)習(xí),我會(huì)讓你弄清楚細(xì)節(jié):)。


查看完整回答
反對(duì) 回復(fù) 2021-10-17
  • 2 回答
  • 0 關(guān)注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)