Относно задача Concatenate Data
Здравейте, решавам задачата по 2 начина, но при единия начин след въвеждане на първите 3 входа (като третия вход са годините) в конзолата, прогрмата изписва дирекно резултата без последния вход. Ето и двете решения:
import java.util.Scanner; public class ConcatenateData { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String firstName = scanner.nextLine(); String lastName = scanner.nextLine(); int age = Integer.parseInt(scanner.nextLine()); String town = scanner.nextLine(); System.out.printf("You are %s %s, a %d-years old person from %s.", firstName, lastName, age, town); } }
Така написана програмата работи нормално, но ако я напиша така:
import java.util.Scanner; public class ConcatenateData { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String firstName = scanner.nextLine(); String lastName = scanner.nextLine(); int age = scanner.nextInt(); String town = scanner.nextLine(); System.out.printf("You are %s %s, a %d-years old person from %s.", firstName, lastName, age, town); } }
При симулацията не ми позволява да въведа стринг "town" и резултатът се изписва без него.
Някакви идеи защо е така.
Здравей, тествах наново кода който е във вида:
Оказа се че работи просто, когато въвеждам входовете в конзолата след годините, не давам "Enter", а давам табулация и след това изписвам и града на същия ред, и така съобщението излиза цялото, както трябва да е. Ако дам "Enter" прогамата слиза на нов ред (scanner.nextLine() ), но не довършва целия текс.
Сега обаче ми изкочи нов въпрос, при една още по проста задачка за лице на правоъгълник, ако напишем кода така:
Да, това не противоречи на по-горното. next() чете до първия интервал и оставя курсора там. след това nextLine(), чете до края на реда. В задачата с правоъгълника няма nextLine(), а точно с него става проблема.
Scanner
breaks its input into tokens using a delimiter pattern, which by default matches whitespace.next()
: Finds and returns the next complete token from this scanner.nextLine()
: Advances this scanner past the current line and returns the input that was skipped.Пробвай следното:
с вход: "2 AAA" и с вход: "2" и Enter.
Повече инфо: тук и тук
при вашия пример се получава същото, както при примера с годините и града
Мисли за входа като за поток/stream или още по-добре за текст.
Ето тук:
Сравни изхода при str = "1 2\n 3 4"; и при str = "1 2 3 4";
\n e нов ред. nextLine() взема от там където сме свършили да вземаме докато стигне до \n.