Java 我的推送功能有什么问题?堆叠

Java 我的推送功能有什么问题?堆叠,java,Java,使用jFrame为我的项目执行此操作 我的问题是,当我输入第一个:1,第二个:2,第三个:3 我单击了view stack,问题显示为[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!")

使用jFrame为我的项目执行此操作

我的问题是,当我输入第一个:1第二个:2第三个:3

我单击了view stack,问题显示为
[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]);
    }
}
if(顶部==-1){
showMessageDialog(null,“堆栈为空!”);
}否则{
viewtxt.setText(“”);

对于(int x=0;x堆栈是FiLo、先进先出。通常堆栈的使用方式是推送项目(第一个是堆栈的底部)并继续堆叠。当需要从堆栈中获取值时,可以按相反顺序返回

因此,您输入的数据顺序将存储为:

1,2,3 底部->顶部

你的数据是正确的,应该是正确的

因此,接下来您需要编写一个pop函数,在该函数中获取堆栈顶部的值,然后减少顶部变量

每次弹出一个堆栈将按以下顺序返回:
3
2
1

根据您所描述的,我认为您可能会从堆栈的前端弹出?如果这是您想要做的,那么每次推送一个新值时,您必须移动所有值。您当前拥有的代码比每次推送时移动所有值要好=]

你在正确的轨道上

EDIT我已经有一段时间没有使用swing了,但希望这会引导您朝着正确的方向前进(我查看了一些旧代码,以确保语法正确,但尚未测试)。要回答您在我的评论中提出的问题,对于pop函数和设置POPTEXT字段的文本,您的代码将类似于以下内容

您的pop函数应该如下所示:

/**
* 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");
        }
    }
});
pop函数可以非常简单,您不需要使用异常,但这是一个很好的实践

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

堆栈是FiLo、First-in、last-out。通常,堆栈的使用方式是推送项目(第一个是堆栈的底部),然后继续堆叠。当需要从堆栈中获取值时,可以按相反的顺序返回

因此,您输入的数据顺序将存储为:

1,2,3 底部->顶部

你的数据是正确的,应该是正确的

因此,接下来您需要编写一个pop函数,在该函数中获取堆栈顶部的值,然后减少顶部变量

每次弹出一个堆栈将按以下顺序返回:
3
2
1

根据您所描述的,我认为您可能会从堆栈的前端弹出?如果这是您想要做的,那么每次推送一个新值时,您必须移动所有值。您当前拥有的代码比每次推送时移动所有值要好=]

你在正确的轨道上

EDIT我已经有一段时间没有使用swing了,但希望这会引导您朝着正确的方向前进(我查看了一些旧代码,以确保语法正确,但尚未测试)。要回答您在我的评论中提出的问题,对于pop函数和设置POPTEXT字段的文本,您的代码将类似于以下内容

您的pop函数应该如下所示:

/**
* 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");
        }
    }
});
pop函数可以非常简单,您不需要使用异常,但这是一个很好的实践

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

我认为你误解了堆栈的工作方式。更具体地说,你用来显示堆栈的算法是不正确的。在你的例子中,你从堆栈的底部开始(x=0),然后朝着顶部工作(实际上,在顶部之外,x=9)。这就是为什么你的输出看起来是相反的(它也充满了不应该打印的零)


显示堆栈时,应从顶部(x=2)开始,然后向底部(x=0)移动。如果您这样做,那么输出将是正确的。

我认为您误解了堆栈的工作方式。更具体地说,您用于显示堆栈的算法是不正确的。在您的情况下,您从堆栈的底部开始(其中x=0),然后向顶部移动(实际上,在顶部之外,其中x=9)。这就是为什么您的输出看起来是相反的(它也充满了不应该打印的零)


显示堆栈时,应从顶部(x=2)开始,然后向底部(x=0)移动。如果您这样做,那么输出将是正确的。

向我们展示所有相关代码,特别是关于堆栈的代码。@Jason,我很抱歉。@Hexafrance:不,请不要看完整的代码。只看相关的代码。简洁、准确、切中要害。您有一个期望。您的期望没有得到满足。您需要深呼吸,打开调试器(或使用
System.out.println
语句或其他形式的基本跟踪)然后,你需要弄清楚为什么会发生这种情况,是因为你的代码中有一个错误,还是因为你的期望是错误的。重复一遍,直到你代码中的错误或你大脑中的错误消失。对不起,我不太擅长发布,向我们展示所有相关的代码,特别是关于堆栈的代码。@Jason,我很抱歉。@Hexafrance:不,请不要完整的代码。只要相关的代码。简洁、准确、切中要害。你有一个期望。你的期望没有得到满足。你需要深呼吸,打开调试器(或者使用
System.out.println
语句或其他形式的基本跟踪)并找到违反预期的第一行代码,如y