Назначение нескольких строк одной переменной - PullRequest
0 голосов
/ 07 февраля 2019

Итак, я работаю над заданием для калькулятора боулинга, которое принимает ряд входных данных и вычисляет счет.Тестовые данные, предоставленные моим инструктором, содержат несколько тестовых случаев, которые обозначают, сколько строк нужно будет вычислить для оценки.Проблема, с которой я столкнулся, заключается в том, что я не могу собрать все 3 строки (есть 3 тестовых примера) в одну строку, разделенную на разные строки.

Это то, что ввод:

3 -, -, -, -, -, -, -, -, -, -

X, X, X, X, X, X, X, X, X, XXX

X, 13, X, 81,5 /, X, 18,33, X, X36

Я пытаюсь отформатировать его так:

-, -, -, -, -, -, -, -, -, -

Х, Х, Х, Х, Х, Х, Х, Х, Х, Х, ХХХ

Х, 13, Х, 81,5 /, Х, 18,33, X, X36

Однако, когда я запускаю свой код, я получаю это как вывод:

-, -, -, -, -, -, -, -, -, - X, X, X, X, X, X, X, X, X, XXX X, 13, X, 81,5 /, X, 18,33, X, X 36

Вот что у меня так далеко.

import java.io.*;
import java.util.*;

public class Bowling {
  public static void main(String[] args)  throws FileNotFoundException {
    File inFile = new File("input.txt");
    Scanner scanFile = new Scanner(inFile);

    int tc = scanFile.nextInt();
    String N = "";


    for (int i=0; i < tc; i++)
        N += scanFile.next();
    System.out.println(N);
  }
}

** ОБНОВЛЕНИЕ: Спасибо всем за ответы, я многое выучил благодаря вашим ответам.Во время постановки этого вопроса я был связан с этой проблемой и не думал об этом.Я снова просмотрел свой код и понял, что все, что мне нужно было сделать, это добавить эту строку, прежде чем строки были добавлены в переменную:

N += "\n";

Еще раз, спасибо всем, кто прокомментировал.

Ответы [ 4 ]

0 голосов
/ 07 февраля 2019

Я нашел ошибку в вашем коде, которая объясняет, почему вывод находится в одной строке.

Команда System.out.println (N) должна быть внутри цикла for.Переменная N не нужна - пожалуйста, пропустите ее.

Существует еще одна проблема утечки ресурсов в вашем коде, поскольку сканер никогда не закрывался.Сканер должен быть закрыт с помощью механизма автоматического закрытия (с помощью оператора try с оператором ресурса).

Я предлагаю следующий код для решения проблемы:

public static void main(String[] args) throws FileNotFoundException {
    File inFile = new File("input.txt");
    try (Scanner sc = new Scanner(inFile)){
        int tc = sc.nextInt();
        for (int i=0; i < tc; i++) {
            System.out.println(sc.next());
        }
    }
}
0 голосов
/ 07 февраля 2019

Можно:

• Создать массив String []

• Использовать разделители, такие как \ t

• Использовать другие методы

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

0 голосов
/ 07 февраля 2019

Я бы с удовольствием использовал StringJoiner в вашем случае, я полностью согласен с ответом @ GBlodgett.Но это тоже может служить альтернативой.

Из javadoc,

StringJoiner используется для создания последовательности символов, разделенных разделителем

что именно подходит для вашего случая.Ваш цикл выглядит так:

StringJoiner sj= new StringJoiner("\n"); // Here, "\n" is the delimiter between every join.

for (int i=0; i < tc; i++){
       sj.add(scanFile.next());
}
System.out.println(sj.toString());

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

0 голосов
/ 07 февраля 2019

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

StringBuilder sb = new StringBuilder();
for (int i=0; i < tc; i++) {
    sb.append(scanFile.next());
    sb.append("\n");
}
System.out.println(sb);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...