Почему этот сегмент кода печатает только 0 в JLabel? - PullRequest
1 голос
/ 02 июня 2019

Как я могу исправить этот сегмент кода, чтобы он печатал числа, введенные мной, через запятую? Пример ввода: 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 ]

3 голосов
/ 02 июня 2019

Вы должны сохранить результат где-нибудь, чтобы позже установить текст.

Например, вы можете сохранить символы в 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 голос
/ 02 июня 2019

Вы устанавливаете текст jlabel всегда равным нулю, потому что «число» всегда будет нулевым в этой точке. Но вы печатаете последовательность чисел на консоли. Вы, вероятно, хотите объединить их в строку и установить текст jlabel соответственно. Вы можете использовать StringBuilder следующим образом:

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

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

    jLabel2.setText(sb.toString())
}
1 голос
/ 02 июня 2019

Проблема в том, что вы печатаете значение number на этикетке. И в этот момент число всегда равно 0. Вместо этого вам нужно распечатать значения в стеке. Пример:

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

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

jLabel2.setText(out.toString());
...