Когда я выполняю следующее:
static void Append() {
StringBuilder sb = new StringBuilder();
System.out.print("How many words do you want to append? ");
int n = input.nextInt();
System.out.println("Please type the words you want to append: ");
for (int c = 1; c <= n; c++) {
String str = input.nextLine();
sb.append(str);
System.out.print(" ");
}
System.out.print(sb);
}
Допустим, если я поставлю 3, то компьютер позволит мне набрать только 2 слова ..
Это результат:
How many words do you want to append? 3
Please type the words you want to append:
I
am
Iam
Кроме того, почему перед словами стоит пробел? функция печати находится после функции ввода. Так разве не должно быть наоборот?
Вход определяется как статическое поле в том же классе. Я знаю, что Scanner # nextLine использует разделители строк, поэтому я вставил println после nextInt, но все равно никакой разницы
добавить input.nextLine(); после строки int n = input.nextInt(); должен работать
Ой, я все время вставлял println, мое намерение было следующей строкой ..




Вам следует заменить nextLine () на next ().
import java.util.Scanner;
public class Main
{
static void Append() {
Scanner input = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
System.out.print("How many words do you want to append? ");
int n = input.nextInt();
System.out.println("Please type the words you want to append: ");
String str = null;
for (int c = 0; c < n; c++) {
str = input.next();
sb.append(str +" " );
}
System.out.print(sb);
}
public static void main(String[] args) {
System.out.println("Hello World");
Append();
}
}
Если вы отлаживаете эту программу, вы можете обнаружить, что в первый раз цикл получит input.nextLine() с пустой строкой. Вот тогда и возникает проблема.
Когда вы вводите 3 и \n для int n = input.nextInt();, входной буфер содержит «3 \ n», а input.nextInt(); просто принимает эту «3», как на изображении ниже:
где входной position равен 1, а в буфере остается "\ n". Затем, когда программе требуется nextLine(), она будет читать буфер до "\ n", что приводит к чтению пустой строки.
Таким образом, возможный обходной путь - добавить String empty = input.nextLine(); перед циклом или использовать input.next(); вместо input.nextLine();, поскольку в документе говорится, что input.next(); вернет следующий токен.
Обновлять: Обратите внимание, что никто не отвечает на ваш второй вопрос внизу ...
Вы должны изменить строку System.out.println(" "); в цикле на sb.append(" ");.
Это то, что я точно подумал. Итак, я вставил следующую строку после nextInt, но все же позволил мне только 2 слова, если я наберу 3
@KeKe Я также пробовал добавить String empty = input.nextLine(); перед циклом, и он показывает ожидаемый для меня результат. Ваша программа не была перекомпилирована?
Нет, я был тупым. Я вставлял PRINTLN все время, когда намеревался вставить nextLine lmao. Спасибо, что ответили на этот глупый вопрос!
Я обновил ответ на ваш вопрос внизу.
Я думаю, это потому, что он прочитал строку, меняющую символ в строку поэтому он считает изменяющуюся строку первой и взятой первой строкой. у вас может быть только две строки для ввода
Если вы поместите строку печати кода, которая была прочитана со ввода, следующим образом:
static void append() {
Scanner input = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
System.out.print("How many words do you want to append? ");
int n = input.nextInt();
System.out.println("Please type the words you want to append: ");
for (int c = 1; c <= n; c++) {
String str = input.nextLine();
System.out.println("input str = " + str); //pay attention to this line
sb.append(str);
System.out.print(" ");
}
System.out.print(sb);
}
вы увидите, что первая итерация не считывает данные с ввода. Потому что в буфере уже есть \n, который был прочитан с помощью nextInt.
Чтобы решить эту проблему, вы можете пропустить строку после nextInt, как в приведенном ниже коде (я не уверен, что это лучшее решение):
static void append() {
Scanner input = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
System.out.print("How many words do you want to append? ");
int n = input.nextInt();
System.out.println("Please type the words you want to append: ");
if (input.hasNextLine()) input.nextLine();
for (int c = 1; c <= n; c++) {
String str = input.nextLine();
System.out.println("input str = " + str);
sb.append(str);
System.out.print(" ");
}
System.out.print(sb);
}
Использование next () не является решением, если вы хотите читать предложения как одну строку.
где определяется
input?