Как мне отформатировать вывод в Java для этого конкретного c экземпляра, чтобы добавить пробелы? - PullRequest
0 голосов
/ 20 февраля 2020

Вот что я пытаюсь сделать sh. Когда вы вводите числа в этом формате

1 2 2 3 3 4 4 5 6

, вы получаете

1 1 2 2 3 2 4 2 5 1 6 1

Другими словами, он говорит вам, сколько у вас каждой строки. Проблема в том, что я не могу понять, как получить пробелы между выходными данными. Это код:

import java.util.Scanner;

public class RunLengthEncoding {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter a sequence of integers separated by spaces:");
        String input = scan.nextLine();
        System.out.println("Input: " + input);
        String c = " ";

        char ch = 0;
        int count = 1;

        for (int x = 0; x < input.length(); x++)
            if (input.charAt(x) != ' ') {
                if (ch == input.charAt(x)) {
                    count = count + 1;

                } else {
                    c = c + ch;
                    if (count != 1) {
                        c = c + count;
                    }

                    ch = input.charAt(x);
                    count = 1;
                }
            }

        c = c + ch;

        if (count != 1) {
            c = c + count;
        }

        System.out.println("encoder output:");
        System.out.println(c);
        System.out.println("\t");
    }
}

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

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

Это мое мнение:

import java.util.Scanner;

public class RunLengthEncoding  {
    private final static String BLANK_SPACE = " ";

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter a sequence of integers separated by spaces:");
        String input = scan.nextLine();
        System.out.println("Input: " + input);
        StringBuilder outputString = new StringBuilder();

        char ch = 0;
        int count = 1;
        char lastChar = 0;

        for (int x = 0; x < input.length(); x++) {
            // get first input in array
            ch = input.charAt(x);

            // if this is the first item we have fetched, there is no count yet - move on to the next input
            if( x == 0 ){
                lastChar = ch;
                continue;
            }

            if (ch != ' ') {
                if (ch == lastChar) {
                    count++;

                } else {
                    outputString.append(lastChar);
                    outputString.append(RunLengthEncoding.BLANK_SPACE);
                    outputString.append(count);
                    outputString.append(RunLengthEncoding.BLANK_SPACE);
                    count = 1;
                }
                lastChar = ch;
            }
        }
        outputString.append(lastChar);
        outputString.append(RunLengthEncoding.BLANK_SPACE);
        outputString.append(count);

        System.out.print("Encoder output: ");
        System.out.println(outputString);
    }
}

Создает этот вывод:

Введите последовательность целых чисел, разделенных пробелами: 1 2 2 3 3 4 5 5 6 6 6 7

Ввод: 1 2 2 3 3 4 5 5 6 6 6 7

Выход энкодера: 1 1 2 2 3 2 4 1 5 2 6 3 7 1

0 голосов
/ 20 февраля 2020

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

    c = c + " " +ch;

В этот код можно внести несколько изменений, таких как использование StringBuilder или использование + = операция, а не c = c + " " + ch;, так как это минимизирует строку до c+=" " + ch;, а также обновление счетчика с использованием count++

...