2017-04-16 70 views
0

所以我有一個教堂問題,我似乎無法弄清楚。我有一個可以設置大小的隊列。唯一的是它是設置大小,並用一堆0填充隊列(這是有道理的)。我試圖用null而不是數字值填充隊列,所以稍後當我使用add方法時,我可以檢查隊列是否爲空。我附加了如何設置一切的圖像。讓我知道你們是否有任何指導或想法。 是我得到的錯誤是:填充elilType與零值

錯誤:在分配從字符串類型不匹配爲int(64)

我一定要在這裏做了錯誤的方式。

enter image description here

回答

4

你所看到的誤差約爲行:

elements[i] = 'nil'; 

'nil'是一個字符串,而不是零值,這是寫作只是nil沒有任何報價。將一個字符串指定給int(64)數組中的插槽不起作用,因此編譯器會發出錯誤。

在Chapel中,只有類可以有一個零值,所以你需要用不同的方式來跟蹤elements數組中的哪個位置被填充。

要做到這一點的一種方法是將兩個新的整數添加到您的班級,以跟蹤包含有效值的第一個和最後一個職位。當您將值添加到隊列中時,last的位置會增加,並且隨着您刪除值,first的位置會增加。當這些值中的任何一個通過數組的末尾時,它都回到前面。如果last曾經捕獲first,那麼陣列已滿。如果first曾經捕獲last那麼該數組是空的。

一些其他的東西,我認爲應該在你的代碼進行修正是:

  • use semaphore.chpl;使用報表與模塊名,文件名沒有工作,所以這大概應該是use semaphore;

  • 如果我在這裏理解你的意圖,該代碼試圖在elements數組的大小設置爲5

    var elementsDomain: domain(1); 
    var elements: [elementsDomain] eltType = 5; 
    

    陣列的域控制數組的大小,所以順便設置數組大小是通過域:

    var elementsDomain: domain(1) = {0..#5}; 
    var elements: [elementsDomain] eltType; 
    
  • elementsDomain = (0..capacity - 1);是設置elementsDomain的範圍文字值。這是可行的,因爲域是一維的,但爲了使其更清楚,您可以將其設置爲域字面值:{0..capacity - 1}