2017-03-16 62 views
0

所以我正在處理這個代碼,用戶在方法xify(x)中輸入一個int數組x。然後應該返回每個元素的數量。所以,如果x是數組[4, 2, 3],我們應該返回頭部列表:4 4 4 4 2 2 3 3 3如何返回一個數組作爲節點列表

但是,看來我的方法只是返回一個空列表。我似乎無法追蹤到底是什麼問題。下面我提供了我的xify()方法,以及一個名爲add的助手方法,可以將節點添加到列表中。

public static Node<Integer> xify(int[] x){ 
    Node<Integer> result = new Node<>(null, null); 
    int counter=0; 
    int length=x.length; 
    while(counter<length){ //loop through the array 
     while(x[counter]!=0){ //take each element, add it to the list * int of the elem 
     add(result,x[counter]); 
     x[counter]=x[counter]-1;} 
     counter++; 
    } 
    return result; 
} 

helper方法:

public static<T> void add(Node<T> list, T element){ 
    while(list.getNext()!=null){ 
     list=list.getNext(); 
    } 
    list.setNext(new Node<>(element, null)); 
} 

什麼是錯我的算法?

P.S正如你可能已經看到的那樣,它正在使用泛型,因爲這是我目前正在學習的東西。

如何,我叫它:

System.out.println(xify(array)); 
System.out.println(toString(xify(array))); 
+0

我希望你的問題是'add(result,x [counter]);'因爲java不是'pass-by-referenced',因此如果你在'add'函數中添加元素,它不會影響你的結果'變量。 – pooyan

+0

@pooyan是的,它會的。 'result'將會發生變異 – Bohemian

+0

@pooyan是的,我的朋友,add函數可以正常工作,我已經使用它了,它完成了它的目的。我只需要我的xify算法的幫助,我假設 – MSK

回答

1

在主代碼調用你的方法兩次,但你的方法是破壞性

x[counter]=x[counter]-1; 

通話結束後,您的數組包含了所有零。所以第二個電話會(正確地)產生一個空列表。

最簡單的「修復」是調用它一次。

Node<Integer> result = xify(array); 
System.out.println(result); 
System.out.println(toString(result)); // not sure what this does anyway? 

更好的解決方法是不破壞你在傳遞什麼?如果你破壞一樣,在現實生活中的數據,其他開發人員追捕你並在股份中燒你(形象地說,當然......)。

+0

OMG!你得到它:D壞消息是該算法似乎仍然關閉...請參閱outout製作.... http://image.prntscr.com/image/7b81868898324a0dacfd2dcc97b33d16.png – MSK

+0

@MSK這是一個不同的題。請問一個新的問題(儘可能縮小代碼和問題的範圍)。 – Bohemian

+0

請不要將java代碼作爲可運行代碼片段發佈:該功能僅適用於JavaScript。 – Bohemian

相關問題