为什么此代码段在JLabel中仅输出0?

时间:2019-06-02 08:29:30

标签: java swing awt actionlistener jlabel

如何解决此代码段,以便打印我用逗号输入的数字?输入示例:1234,预期结果:1,2,3,4。

此代码可以在Netbeans的普通文件中使用,但是我很难更改它以适合GUI。当我运行它时,它只在结果JLabel上显示零。我似乎可以找到任何可以帮助我解决问题的方法。

private void jButton1ActionPerformed(ActionEvent evt) { 

    Stack stack = new Stack();
    int number = (int) (Integer.parseInt(jTextField1.getText()));
    while (number > 0) {
        stack.push(number % 10);
        number = number / 10;
    }

    while (!stack.empty()) {
        System.out.print(stack.pop());

        if (!stack.empty()) {
            System.out.print(",");
        }
        jLabel2.setText(String.valueOf(number));
    }
}

3 个答案:

答案 0 :(得分:3)

您应该将结果存储在某处,以便稍后设置文本。

例如,您可以将字符存储在StringBuilder中:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {   
    Stack stack = new Stack();
    int number = (int) (Integer.parseInt(jTextField1.getText()));
    while (number > 0) {
        stack.push(number % 10);
        number = number / 10;
    }
    StringBuilder sb = new StringBuilder();
    while (!stack.empty()) {
        sb.append(stack.pop());
        if (!stack.empty()) {
            sb.append(",");
        }
    }
    jLabel2.setText(sb.toString());
}

答案 1 :(得分:1)

问题是您要在标签上打印number的值。此时,数字始终等于0。 您要打印的是堆栈中的值。 示例:

StringBuilder out = new StringBuilder();
while (!stack.empty()) 
{
    out.append( stack.pop());

    if (!stack.empty()) 
    {
        out.append(",");
    }
}

jLabel2.setText(out.toString());

答案 2 :(得分:1)

您将jlabel的文本始终设置为零,因为此时“ number”将始终为零。但是,您将数字序列打印到控制台。您可能希望将它们串联成一个字符串,并相应地设置jlabel的文本。 您可以像这样使用StringBuilder:

StringBuilder sb = new StringBuilder();
while (!stack.empty()) {
    sb.append(stack.pop());

    if (!stack.empty()) {
        sb.append(", ");
    }

    jLabel2.setText(sb.toString())
}