Типични програми работят с данни, които трябва да бъдат въведени и изведени от потребителя. В този урок ще изследваме как да обработваш входни данни от потребителя и ефективно да форматираш изходи в Java. Има различни начини да се събират или предоставят информация. В това отношение разграничаването между изходи на конзолата и съобщения за грешки играе важна роля. Ще научиш и как да четеш данни ефективно, било то чрез конзолата или графични потребителски интерфейси.
Най-важни открития
- Java предлага няколко начина за обработка на входни и изходни данни.
- Важно е да се разделят изходите и грешките.
- Scanner е полезен инструмент за четене на входни данни от потребителя.
Основен изход с System.out
Първата стъпка при работа с изходи в Java е взаимодействието с System.out, който представлява стандартния изход. С класa PrintStream, който представлява System.out, можеш да изпращаш изходи на конзолата.
За да генерираш текстов изход, можеш просто да използваш System.out.print или System.out.println. println прекратява реда след изхода, докато print не го прави. Така че, ако искаш следващият изход да бъде в същия ред, използвай print.

Можеш да изпълниш програмата по следния начин:
Този изход ще се покаже на конзолата и можеш да настроиш програмата, за да изведеш допълнителна информация.
Грешкови изходи с System.err
За грешкови изходи е препоръчително да използваш System.err. Това предлага предимството, че грешките и обикновените изходи се отделят ясно. Грешките могат да бъдат визуално подчертавани, например чрез използване на различен цвят в конзолата (често червен).
Когато се появи грешка, можеш да изведеш конкретна грешка с System.err.print или System.err.println:

Ето един пример за съобщение за грешка:
Чрез разделянето на обикновените изходи и съобщения за грешки можеш да увеличиш четливостта и проследимостта на изходите в твоята програма.
Входни данни с System.in и Scanner
За да получим входни данни от потребителя, използваме System.in. Важно е да се използва класът Scanner от пакета java.util. Scanner опростява четенето на данни, тъй като автоматично разпознава различни типове данни и връща входа като низ.
Първо трябва да импортираш Scanner:

След това можеш да създадеш инстанция на Scanner и да предадеш System.in:
Сега имаш възможност да четеш входните данни в твоята програма.
Събиране на входни данни от потребителя
За да получиш данни от потребителя, можеш да използваш nextLine(). Това позволява записването на цяла редица като низ. Типичен пример би бил въвеждането на възрастта на потребителя.
Ето един пример за входни данни от потребителя:

В този пример потребителят е помолен да въведе възрастта си, а програмата след това извежда въведената информация обратно.
Интеракции с потребителя с графични диалози
Ако искаш да използваш графичен потребителски интерфейс (GUI), можеш да използваш класа JOptionPane от пакета javax.swing. Това ти позволява да събираш входни данни в стандартен диалогов прозорец, което може да е по-удобно за потребителя.

Това показва графичен диалог, в който потребителят може да въведе възрастта си.
Валидиране на входните данни от потребителя
Важно е да валидираш входните данни, които идват от потребителя. Трябва да се увериш, че възрастта е наистина в допустим формат, например като цяло число. За целта можеш да се опиташ да конвертираш низа в число и да работиш с изключения.

Чрез внедряване на тези валидирания, ти защитаваш програмата си от неочаквани входове.
Резюме – Оптимизиране на входа и изхода в Java
Сега познаваш основните концепции за вход и изход в Java. Разграничаването между стандартни изходи и съобщения за грешки е основополагаюващо за създаването на яснота в комуникацията на програмата. Освен това, използването на Scanner и възможността за имплементиране на графични диалози предлагат гъвкави решения за въвеждане на данни.
Често задавани въпроси
Кой клас използвам за стандартния изход?Използваш System.out, за да показваш изходи в конзолния прозорец.
Как мога да изведа съобщения за грешки?Използвай System.err за изход на съобщения за грешки, за да ги отделиш от обикновените изходи.
Как да събирам входни данни от потребителя в конзолата?Scanner от java.util е идеален за събиране на входни данни от System.in.
Мога ли да използвам графични входни диалози?Да, чрез JOptionPane от javax.swing можеш да използваш графични диалози за вход.
Трябва ли да валидирам входните данни от потребителя?Да, валидирането на входните данни е важно, за да се избегнат грешки и неочаквани входове.