Почему эти backspace не печатают - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь получить факториал заданного целого числа с помощью приведенного ниже кода, но окончательный \b не печатается. Почему?

import java.util.*;

class Example {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);
        System.out.println("INPUT AN INTEGER");
        int num = input.nextInt();
        System.out.print(num + "!=");
        for(int i = num; i > 0; i = i - 1){
            System.out.print(i + "*");
        }
        System.out.print("\b");
    }
}

1 Ответ

1 голос
/ 31 января 2020

Как указано, функциональность различных выходных терминалов сильно различается. Имеются полноценные терминалы VT100, запросы командной строки Windows, представления в среде IDE et c. Так что backspace, вероятно, не поддерживается каждым из них.

Однако вы не должны генерировать текст , если это не требуется. Не возвращайтесь или - в этом случае - не возвращайте после факта. Это подверженный ошибкам процесс, и вы используете больше ресурсов памяти, сначала создав строку. Последнее не является проблемой для одного *, но в целом вы стараетесь избегать использования ложной памяти.


Следующий код должен работать:

for (int i = num; i > 0; i--){
    if (i != num) {
        print("*");
    }
    System.out.print(i);
}

Также обратите внимание использование i-- вместо i = i - 1.


Когда вы будете готовы продвинуться, вы можете взглянуть на String.format() и StringBuilder класс и создать полный строка до распечатки.

В принципе, вы, конечно, можете использовать подстроку для удаления последнего символа *, если вы сначала создаете строку. Или вы можете удалить его из экземпляра StringBuilder, если используете его.

Я бы все же предпочел бы не добавлять его в первую очередь и использовать приведенный выше код или небольшую модификацию его для построения всей строки.

...