Как удалить конечные пробелы в очереди / очереди приоритетов JAVA - PullRequest
0 голосов
/ 15 апреля 2020
public class StreamingIntegers {
    public static void main(String[] args) {
        Scanner scanin = new Scanner(System.in);
        PriorityQueue<Integer> sorted_num = new PriorityQueue<>();
        while (true) {
            String numbers = scanin.nextLine();
            if (numbers.equals("END")) {
                break;
            } else {
                String[] tokens = numbers.split(" ");
                for (String token : tokens) {
                    sorted_num.add(Integer.parseInt(token));
                }
            }
        }
        while (!sorted_num.isEmpty()) {
            System.out.print(sorted_num.remove() + " ");
        }
        scanin.close();
    }
}  

PHOTO OF RESULT WHEN USING PROGRAM

Как убрать этот маленький пробел на конце?

Ответы [ 4 ]

2 голосов
/ 15 апреля 2020

Я бы переключился на размещение пробела после первого нажатия:

System.out.print(sorted_num.remove());
while (!sorted_num.isEmpty()) {
    System.out.print(" " + sorted_num.remove());
}

Для этого не требуется проверка условий в каждой строке

, если есть вероятность, что вы получаете пустую коллекцию, вы охраняете ее:

if (sorted_num.isEmpty()) {
    System.out.print("Nothing to sort here!");
} else {
    System.out.print(sorted_num.remove());
    while (!sorted_num.isEmpty()) {
        System.out.print(" " + sorted_num.remove());
    }
}

Надеюсь, что поможет

0 голосов
/ 15 апреля 2020

Другим способом является использование префикса, который изначально является пустой строкой и имеет значение пробела в l oop:

String prefix = "";
while (!sorted_num.isEmpty()) {
    System.out.print(prefix + sorted_num.remove());
    prefix = " ";
}
0 голосов
/ 15 апреля 2020

Это происходит потому, что вы печатаете пробел после каждого вывода. Чтобы удовлетворить ваши требования, вы должны печатать элементы с пробелом только до второго последнего элемента, а затем печатать последний элемент отдельно без пробела.

Сделайте это следующим образом:

int size = sorted_num.size();
for (int i = 0; i < size - 1; i++) {
    System.out.print(sorted_num.remove() + " ");
}
System.out.print(sorted_num.remove());
0 голосов
/ 15 апреля 2020

В вашем последнем while l oop проверьте размер queue и добавьте пробел только в том случае, если в нем содержится более одного элемента следующим образом:

System.out.print((sorted_num.size()==1)?sorted_num.remove():sorted_num.remove()+" "); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...