2013-07-09 106 views
1

爲我的項目使用jFrame做到這一點。我的Push功能有什麼問題?堆疊

我的問題是,當我輸入第一:1第二:2第三:3

和我點擊視圖棧,並且該問題顯示[ 1 , 2 , 3 , 0 , 0 , 0 . . . ] 我認爲該視圖應該是[ 3 , 2 , 1 , 0 , 0 . . . .] 我所瞭解的關於推送的內容。使用

代碼:

//全局變量

int[] myStack = new int [10]; 
int top = -1; 

//按鈕

if (top == 9){ 
     JOptionPane.showMessageDialog(null, "Stack Full!"); 
    }else{ 
     int val = Integer.parseInt(pushtxt.getText()); 
     top++; 
     myStack[top] = val; 
     pushtxt.setText(""); 
    } 
}   

//瀏覽堆棧按鈕

if (top == -1){ 
    JOptionPane.showMessageDialog(null, "Stack Empty!"); 
}else{ 
    viewtxt.setText(""); 
    for (int x=0; x<=9; x++){ 
     viewtxt.setText(viewtxt.getText()+" "+ myStack[x]); 
    } 
} 
+0

向我們展示*相關*代碼的所有*,特別是關於堆棧。 @Jason,我的歉意。 – hexafraction

+1

@hexafraction:不,請不要*整個*代碼。只是*相關的*代碼。要簡明扼要,精確並重點。 – jason

+2

你有期待。你的期望沒有得到滿足。你需要深吸一口氣,打開一個調試器(或使用'System.out.println'語句或其他形式的基本跟蹤),並找到你的期望違反的第一行代碼,程序。然後,您需要弄清楚*爲什麼會發生這種情況,以及這是因爲您的代碼中存在錯誤還是因爲您的期望錯誤。重複,直到代碼中的錯誤或者大腦中的錯誤消失。 – jason

回答

0

棧是先進後出,首先在,最後。一般來說,堆棧的使用方式是推物品(首先是堆棧的底部)並繼續堆疊。當你需要從彈出的堆棧中獲取值時,按照相反的順序返回。

所以爲了您輸入的數據將作爲存儲:

1,2,3 底部 - >頂部

您的數據是正確的,這是理所應當的。

因此,接下來您需要編寫一個彈出式函數,您可以在此處抓取堆棧頂部的值,然後遞減頂部變量。

同時膨化你堆人會按以下順序返回:

從你描述的東西,我想也許你會從前面彈出堆棧?如果這就是你想要做的事情,那麼每當你推新的價值時,你都必須轉移所有的價值。你現在擁有的是比每次按下所有值都更好的代碼=]

您正處在正確的軌道上。

編輯我沒有在一段時間內使用swing,但希望這會引導你在正確的方向(我看了一些舊代碼,以確保我的語法是正確的,但沒有經過測試)。要回答你在我的評論提出的問題,你的代碼看起來類似於彈出功能以下和設置文本的popTextField

您的彈出功能應該看起來像下面的內容:

/** 
* The code for the button press could be as simple as follows 
*/ 
popBtn.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent arg0){ 
     try{ 
      popTextField.setText(popStack); 
     }catch(IndexOutOfBoundsException e){ 
      popTextField.setText("The stack is empty"); 
     } 
    } 
}); 

彈出功能可以非常簡單。你不需要使用例外 - 但這是一個好習慣。

/** 
* Simple Pop function 
*/ 
private int popStack(){ 
    if(top >= 0){ 
     return myStack[top--]; 
    }else{ 
     throw new IndexOutOfBoundsException("The stack is empty"); 
    } 
} 
+0

謝謝先生:)現在我明白了! :D –

+0

很高興幫助!玩得開心=] –

+0

先生,你可以騰出一個Pop按鈕的代碼? :D –

1

我認爲你誤解了堆棧的工作方式。更具體地說,用於顯示堆棧的算法不正確。在你的情況下,你從堆棧的底部開始(x = 0),並朝着頂部(實際上,超出頂部,其中x = 9)工作。這就是爲什麼你的輸出看起來與你相反(它也充滿了你不應該打印的零)。

顯示堆棧時,您應該從頂部(x = 2)開始,朝着底部(x = 0)工作。如果你這樣做,那麼輸出將是正確的。

+0

你能分享一個代碼嗎? :D –

+1

不,我很樂意向你解釋一些事情,但我不樂意爲你做你的工作。 – misha