Java вивести повідомлення на екран. Форматуємо виведення чисел у Java. Конструктори вікна підтвердження showConfirmDialog

28.05.16. Даний матеріал присвячений системі введення - виведення Java. Система вводу-виводу (input/output, або I/O) інформації, реалізовані у складі стандартного пакета Java.io. Підтримка введення-виведення реалізовано ядром бібліотек програмного інтерфейсу(API), а не ключовими словамимови. Класи бібліотек введення – виведення Java розділені на дві частини – одні здійснюють введення, інші виведення. Тим не менш, Java забезпечує потужну та гнучку підтримку введення – виводу, коли це стосується файлів та мереж.

Потоки

Введення - виведення в Java здійснюється за допомогою так званих потоків в Java (stream), яка або породжує, або приймає інформацію. Здійснення введення - виведення за допомогою потоків має свої плюси, тому що потік приховує всі деталі низькорівневих процесів, що відбуваються з даними у пристроях введення - виведення. Всі потоки поводяться на однаково, навіть незважаючи на те, що реальні фізичні пристрої, до яких вони підключені, відрізняються один від одного. Таким чином, одні й ті самі класи та методи введення – виведення застосовні до пристроїв різного типу. Це означає, що абстракція вхідного потоку може охопити різні типивведення: із дискового файлу, клавіатури або мережевого сокету. Аналогічно вихідний потік може посилатися на консоль, дисковий файл або підключення до мережі. Потоки - це ясний спосіб поводження з введенням - виводом без необхідності для вашого коду розбиратися з різницею, наприклад, між клавіатурою і мережею. Java реалізує потоки всередині ієрархії класів, що визначені в пакеті java.io. Java визначає два типи потоків: байтові та символьні. Байтові потоки надають зручні засоби для управління введенням та виведенням байтів. Байтові потоки використовуються, наприклад, під час читання та запису бінарних даних. Звичайне консольне введення-виведення йде через байтові потоки. Символьні потоки пропонують зручні можливості керування введенням та виведенням символом. Вони використовують кодування Unicode і таким чином можуть бути інтернаціоналізовані. Крім того, в деяких випадках символьні потоки ефективніші, ніж байтові.

Класи байтових потоків

Основні абстрактні класи, від яких успадковують усі класи байтового введення – виведення, - InputStream та OutputStream. Кожен з цих абстрактних класів має кілька реальних підкласів, які управляють відмінностями між різними пристроями, такі як дискові файли, мережеві підключення і навіть буфери пам'яті. Абстрактні класи InputStream та OutputStream перевизначають кілька ключових методів, які реалізує інші потокові класи. Два найважливіші – це read() і write() , які, відповідно, читають і пишуть байти даних. Обидва методи оновлені як абстрактні в InputStream OutputStream . У класи – спадкоємцях вони перевизначаються. Класи байтових потоків перераховані нижче.
Класи байтових потоків
BufferedInputStream - Буферизований вхідний потік
BufferedOutpudStream - Буферизований вихідний потік.
ByteArrayInputStream Вхідний потік, що читає з масиву байт.
ByteAOutputInputStream - вихідний потік, що записує з масиву байт
DataInputStream - Вхідний потік, що записує методи для читання стандартних типів даних Java
DataOutputStream – вихідний потік, що включає методи для запису стандартних типів Java.
FileInputStream - вихідний потік, що читає з файлу
FileOutputStream - Вхідний потік, що записує файл.
FilterInputStream - Реалізація InputStream
FilterOutputStream - Реалізація OutputStream
InputStream – Абстрактний клас, що описує потік введення.
OutputStream – абстрактний клас, що описує потік виведення.
ObjectInputStream – Вхідний потік для об'єктів.
ObjectOutputStream – вихідний потік для об'єктів.
PipedInputStream - Вхідний канал (наприклад, міжпрограмний).
PipedOutpudStream - вихідний канал.
PrintStream - Вихідний потік, що включає print() та println().
PushbackInputStream - Вхідний потік, що підтримує однобайтове повернення.
RandomAccessFile - Підтримуюче файлове введення - висновок з довільним доступом.
SequenceInputeStream - Вхідний потік, що є комбінацією двох і більше вхідних потоків, які читаються спільно - один після іншого.

Класи символьних потоків

Основними абстрактними класами символьного потоку є класи Reader та Writer. Ці абстрактні класи керують потоками символів Unicode. У Java передбачено кілька конкретних підкласів кожного з них. Абстрактні класи Reader та Writer визначають кілька ключових методів, які реалізують інші потокові класи. Два найважливіші – це read () і write() , які відповідно читають і пишуть символьні дані. Ці методи перевизначаються у потокових класах – спадкоємцях. Класи символьних потоків наведені нижче.

Класи символьних потоків BufferedReader - Буферизований вхідний символьний потік. BufferedWriter - Буферизований вихідний символьний потік. CharArrayReader - Вхідний потік, який читає із символьного масиву. CharArrayWriter - вихідний потік, який читає із символьного масиву. FilterWriter - Фільтр Письменник. FilterReader – Фільтр читач. FileWriter - Вихідний потік, що пише файл FileReader - Вхідний потік, що пише файл InputStreamRader - Вхідний потік, що транслює байти в символи. LineNumberReader - Вхідний потік, що підраховує рядки. OutputStreamWriter - вихідний потік, що транслює байти в символи. PipedReader – Вхідний канал. PipedWriter - Вихідний канал PrintWriter - Вихідний потік, що включає print() та println(). PushbackReader - Вхідний потік, що дозволяє повертати символи у потік. Reader - Абстрактний клас, що описує символьне введення. StringReader - Вхідний потік, який читає з рядка. StringWriter - Вхідний потік, що пише рядок. Writer - абстрактний клас, що описує символьний висновок

Читання консольного введення

У Java 1.0 єдиним способом виконання консольного введення було використання байтового потоку, і існує великий обсяг старого коду, в якому застосовується цей підхід. Сьогодні застосування байтового потоку для читання консольного введення, як і раніше, технічно можливо, але чинити так не рекомендується. Переважний спосіб читання консольного введення – це використовувати символ – орентований потік, що значно спрощує можливості інтернаціоналізації та підтримки програм, що розробляються. У Java консольне введення виконується читанням System.in . Щоб отримати символьний потік, приєднаний до консолі, необхідно помістити System.in в оболонку об'єкта BufferedReader . BufferedReader підтримує вхідний потік буферизований. Найбільш часто використовується його конструктор виглядає так:

BufferedRader(Reader inputReader) Наведений вище приклад inputReader – це потік, який зв'язується з створюваним екземпляром BufferedRader. Rader – абстрактний клас. Одним з його конскретних спадкоємців є InputStreamReader, який перетворює байти на символи. Для отримання об'єкта InputStreamRaeder , який приєднаний до System.in, можна застосувати наступний рядок коду:

InputStreamReader()

Оскільки System.in посилається на об'єкт типу InputStream, він має бути використаний як параметр inputStream. Зібравши всі разом, отримаємо наступний рядок коду, який створює BufferedReader, з'єднаний з клавіатурою:
BufferaedReader br = New BufferedReader(New InputStreamReader(System.in));

Після виконання цього оператора br є підставою на символах потік, підключений до консолі через System.in .

Читання символів

Для читання символів із BufferedReader застосовується read() . Нижче показана версія read() , яка використовуватиметься:

Int read() throws Ioexception

Щоразу, коли викликається метод read() , він читає символ із вхідного потоку та повертає його як ціле значення. При досягненні кінця потоку повертається -1. Як бачите, метод може порушити виключення IOException. У наступній програмі демонструється застосування read() , читаючи символи з консолі до тих пір, доки користувач не веде "q”. Зверніть увагу, що будь-які винятки введення - виводу, які можуть бути згенеровані, просто передаються в main() . поширений при читанні з консолі, але при бажанні ви можете обробити помилки такого роду самостійно.


//Використання BufferedReader для читання символів з консолі.
//Import java.io.*;
//Class BRRead(
//Public static void main(Straing args) throws IOException
//{
//char c;
//
//System.out.println("Вводьте символи, 'q' – для виведення.");
//// читати символи
//do(
//c = (char) br.read();
//System.out.println(c);
//)while(c!= ‘q’);
//}
//}

Нижче наведено приклад запуску цієї програми:
Вводьте символи, q для виведення.
123abcq
1
2
3
A
B
C
Q
Цей висновок може виглядати трохи не так, як ви очікували, тому що System.in Є рядково - за замовчуванням буферизованими. Це означає, що жодного введення дійсності програмі віддається доти, доки буде натиснута клавіша (ENTER). Як можна припустити, це робить read() лише частково застосовним для інтерактивного консольного.

Читання рядків

Щоб прочитати рядок з клавіатури, використовуйте версію методу readLine() , який є членом класу BufferedReader . Його загальна форма така:
String readLine() throws IOException
Як бачите, він повертає об'єкт String . Наступна програма демонструє BuferedReader і метод readLine() . Програма читає та відображає рядки тексту доти, доки ви не введете слово «стоп»:

Import java.io.*;


Class BRReadLines (

{
// Творець BufferedReader з використанням System.in
BufferedReader br = New BufferedReader(New InputStreamReader(System.in));
String str;

System.out.println("Введіть "стоп" для завершення.");
do (
str=br.readLine();
System.out.println(str);
) while(!str.equals("стоп"));
}
}

У прикладі створюється крихітний тестовий редактор. У коді створюється масив об'єктів String і потім читаються рядки тексту із збереженням кожного рядка як елемент масиву. Читання відбувається до 100 рядків або до того, як буде введено слово «стоп». Для читання з консолі використовується BuffeReader.

/ / Крихітний редактор.
import java.io.*;
class TinyEdit (
public static void main(String args) throws IOException
{
// Творець BufferedReader, використовуючи System.in
BufferedReader br = New BufferedReader(New InputStreamReader(System.in));
String str=new String;
System.out.println("Вводьте рядки тексту.");
System.out.println("Введіть ‘стоп’ для завершення.”);
for (int i = 0; i< 100; i++) {
str[i] = br.readLine();
if(str[i].equels("стоп")) break;
}
System.out.println("\nОсь ваш файл:”);
//Відобразити рядки
for(int i = 0; i<100; i++) {
if(str[i].equals("стоп")) break;
System.out.println(str[i]);
}
}
}
Нижче наведено результат запуску цієї програми:

Введіть рядки тексту.
Введіть 'стоп' для завершення.
Це один рядок.
Це рядок два.


стоп
Ось ваш файл:
Це один рядок.
Це рядок два.
Java робить роботу з рядками простою.
Просто створіть об'єкт String.

Запис консольного виводу

Консольний висновок найпростіше здійснювати за допомогою методів print() та println. Ці методи визначені у класі PrintSteam (який є типом об'єкта System.out ). Навіть незважаючи на те, що System.out - Байтовий потік, застосування його для виведення в простих програмах цілком виправдане. Тим не менш, у наступному розділі описано символ – орієнтована альтернатива. Оскільки PrintStream - вихідний потік, успадкований від OutputStream , він також реалізує низькорівневий метод write(). Тобто write() може застосовуватись для запису на консоль. Найпростіша форма write() , визначеного в PrintStream , показана нижче:

void write(int byteval)

Цей метод пише в потік байт, переданих в байт. Хоча параметр byteval оголошений як цілий, записуються лише 8 його молодших біт. Ось короткий приклад, який використовує write() для виведення літери «А» з наступним переведенням рядка на екран:
//Демонстрація System.out.write().
class WriteDemo (

int b;
b = 'A';
System.out.write(b);
System.out.write('\n');
}
}
Вам не часто доведеться використовувати write() для виведення на консоль (хоча в деяких ситуаціях це і зручно), оскільки значно простіше застосовувати для цього print() та println() .

Клас PrintWriter

Хоча застосування System.out для виведення на консоль допустимо, він рекомендується в основному для налагодження програм. PrintWriter визначає кілька конструкторів. Один з тих, які ми використовуватимемо, показаний нижче:

PrintWriter(OutputStream outputStream, boolean flushOnNewline)

Вище наведений приклад outputStream –є об'єктом типу OutputStream, а flushOnNewline управляє тим, чи буде Java скидати буфер у вихідний потік щоразу при виклик методу println() . Якщо flushOnNewline одно true, то відбувається автоматичне скидання буфера, якщо false, то автоматичний не робиться. PrintWriter підтримує методи print() та println() для всіх типів, включаючи object . Тобто, ви можете використовувати ці методи таким же способом, як вони застосовуються в System.out. Якщо аргумент не простого типу, PrintWriter викликає метод toString і потім друкує результат. Щоб писати на консоль за допомогою PrintWriter, специфікуйте System.out як вихідний поток і скидаєте потік після кожного символу нового рядка.

Наприклад



Наведений вище приклад рядка коду створює PrintWriter, який підключений до консольного виводу. Наведена нижче програма демонструє застосування PrintWriter для керування консольним висновком:
//Демонстрація PrintWriter
import java.io.*;
public class PrintWriterDemo (
public static void main(String args) (
PrintWriter pw = New PrintWriter(System.out, true);
Pw.println("Це рядок");
Int i = -7;
Pw.println(i);
Double d = 4.5e - 7;
Pw.println(d);
}
}
Висновок цієї програми виглядатиме так:

Це рядок
- 7
4.5Е – 7
Пам'ятайте, що немає нічого неправильного у застосуванні System.out для простого виведення тексту на консоль. Проте PrintWriter забезпечить можливість простої інтернаціоналізації реальних програм.

Читання та запис файлів

Java надає безліч класів та методів, які дозволяють вам читати та записувати файли. У Java всі файли байт – орієнтовані, і Java надає методи читання і записи байтів у файл. Проте Java дозволяє також помістити байт орієнтовані файлові потоки в оболонки символ - орієнтованих об'єктів. Java надає безліч класів та методів, які дозволяє вам читати та записувати файли. У Java всі файли байт – орієнтовані, і Java надає методи читання і записи байтів у файл. Проте Java дозволяє також помістити байт – орієнтовані файлові потоки в оболонки символ – орієнтованих об'єктів. Для найчастіше використовуваних потоків класу – це FileInputStream та FileOutputStream , які створюють байтові потоки, пов'язані з файлами Щоб відкрити файл, ви просто створюєте об'єкт одного з цих класів, вказавши ім'я файлу як аргумент конструктора. Хоча обидва класи мають і додаткові перевизначені конструктори, ми будемо використовувати лише такі:

FileInputStream(String fileName) throws FileNotFoundEcxeption
FileOutputStream(String fileName) throws FileNotFoundEcxeption

Тут filename – ім'я файлу, який хочете відкрити. Коли ви створюєте вхідний потік, якщо файл не існував, збуджується виняток FileNotFountException. Для вихідного потоку, якщо файл не може бути створений, також збуджується виняток FileNotFountException. Коли вихідний файл відкрити, будь-який раніше існуючий файл з тим самим ім'ям знищується. Коли ви завершуєте роботу з файлом, потрібно закрити його викликом методу close(). Цей метод визначено і в FileInputStream та в FileOutputStream , як показано нижче:

void close() throws IOException

Щоб читати файл, ви можете використовувати версію методу read() , які визначені в FileInputStream . Та, що ми використовуватимемо, виглядає так:

Int read() throws IOException

Щоразу, коли викликається цей метод, він читає єдиний байт із файлу і повертає його як ціле. Read() повертає – 1, коли досягти кінця файлу. Метод може збуджувати виняток IOException.
У наступній програмі read() використовується для введення та відображення вмісту текстового файлу, ім'я якого специфіковано в аргументі командного рядка. Зверніть увагу на блок try/catch , що обробляє дві помилки, які можуть виникнути під час роботи програми – коли вказаний коли файл не знайдено, або коли користувач забув вказати ім'я файлу. Ви можете застосовувати той же підхід щоразу при використанні аргументів командного рядка. Інші можливі винятки введення – виводу просто передаються у main() що цілком прийнятно для такого простого прикладу. Однак робота з файлами. Часто ви побажаєте обробити самостійно весь виняток введення – виведення.

/* Відображає текстовий файл.
Щоб використати цю програму, вкажіть
ім'я файлу, який хочете подивитись.
Наприклад, щоб переглянути файл TEST.TXT,
Використовуйте наступний командний рядок:
Java ShowFile TEST.TXT
*/
Import java.io.*;
class ShowFile (
public static void main(String args)
throws IOException
{
int i;
FileInputStream fin;

try (
fin = new FileInputStream(args);
) catch(FileNotFountException e) (
System.out.println("Файл не знайдено");
return;
) catch(ArrayIndexOutOfBoundsException e) (
System.out.println("Використання: ShowFile Файл");
return;
}
//читати символ до отримання символу EOF (кінець файлу)
do (
i = fin.read(); vif(I ! = 1) System.out.print((char) i);
)while (i! = -1);
fin.close();
}
}

Для запису у файл ви будете використовувати метод write() , визначений у FileOutputStream . Його найпростіша форма виглядає так:

void write(int byteval) throws IOException

Це метод пише у файл байт, переданий у bytevavl. Хоча byteval оголошений як цілий, у файл записуються тільки його молодші вісім біт. Якщо при записі буде помилка, порушується виняток IOException . У цьому прикладі write() використовується для копіювання текстового файлу:


/*Копіювання текстового файлу.
Для використання цієї програми вкажіть
імена вихідного та цільового файлів.
Наприклад, щоб скопіювати файл FIRST.TXT у файл
SECOND.TXT, використовуйте наступний командний рядок:
Java CopyFile FIRST.TXT SECOND.TXT
*/
import java.io.*;
class CopyFile (
public static void main(String args) throws IOExecption
{
int i;
class CopyFile (
public static void main(String args) throws IOException
{
int i;
FileInputStream fin;
FilePutputStream fount;
try (
//відкрити вхідний файл
try (
fin = new FileInputStream(args);

System.out.println("Вхідний файл не знайдено");
return;
}
//відкрити вихідний файл
try (
fout = New FileOutputStream(args );
) catch (FileNotFountException e) (
System.out.println("Помилка відкриття вихідного файлу");
return;
}
)catch(ArrayIndexoutOfBoundsException e) (
System.out.println("Використання: CopyFile Вихідний цільовий");
return;
}
//Копіювати файт
try(
do(
i = fin.read();
if(i ! = -1) fount.write(i);
)while(IOException e) (
System.out.println("Помилка файлу");
}
fin.close();
fin.close();
}
}

Зверніть увагу на спосіб обробки потенційних помилок введення – виведення в цій програмі. На відміну від деяких інших мов програмування, включаючи С і С++, які використовують коди помилок виявлення файлових помилок, Java застосовує свій механізм винятків. Це не тільки робить управління файлами зрозумілішим, але також дозволяє Java просто відрізняти умову досягнення кінця файлу від файлових помилок під час введення. У С/С++ багато функцій введення повертають те саме значення, коли відбувається помилка і коли досягається кінець файлу. (Тобто в С/С++ умова EOF часто відображається на те саме значення, що й помилка введення.) Зазвичай це означає, що програміст зобов'язаний включати додаткові оператори визначення того, яке подія насправді сталося. У Java помилки передаються вашій програмі як винятків, а чи не через значення, повертається read(). Тобто коли read() повертає -1, це означає лише одне: досягнуто кінця файлу.

Є багато особливостей, про які бажано знати, програмуючи на Java, навіть якщо Ви програміст-початківець. Під катом я розповім як вивести кирилиці в консоль Windows і наочно це продемонструю.
Почнемо із простого.

Базові типи

Їх у Java 8:

  • boolean;
  • byte, char, short, int, long;
  • float, double.

Char– це символьний тип даних. Змінна такого типу займає 2 байти пам'яті, тому що зберігається в кодуванні unicode.
Зі змінними цього типу можна робити тільки операції привласнення, зате різними способами. Найпростіший з них має такий вигляд:
c = "b";
Символ можна представити також у вигляді коду, записаного у вісімковій системі числення:
c = "077";
Де 077 – це обов'язково тризначне число, не більше ніж 377 (=255 у десятковій системі числення).
Або ж у шістнадцятковій системі числення наступним чином:
c = "u12a4";
Крім того, існують спеціальні символи, такі як знак абзацу, розрив сторінки та ін. Знак абзацу запишеться, наприклад, так:
c = "\n";
Не треба їх перераховувати тут. За потреби завжди можна заглянути у довідник.

Тепер увага. Кодування за умовчанням середовища програмування Java є Latin-1. Однак, коли виводиться в потік System.out, символи перетворюються на кодування за замовчуванням для операційної системи. Так для російськомовної локалізації кодуванням за замовчуванням є Windows-1251, для linux такою буде UTF-8. Однак за задумом Microsoft вирішили для консолі Windows використовувати кодування Cp866.

Відповідно висновок: для коректного відображення кириличних символів консолі потрібно виводити символи в кодуванні Cp866!

Це можна зробити в такий спосіб:

Import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

Public class Hello (
public static void main(String args) throws UnsupportedEncodingException ( /*Може виникнути виняток типу UnsupportedEncodingException*/
String x = "Привіт, мир!"; //Це рядок, який ми виводитимемо на екран
PrintStream printStream = New PrintStream(System.out, true, "cp866");
/*Створюємо новий потік виводу, який автоматично перетворюватиме символи в кодування Cp866*/
printStream.println(x);
}
}
Збережемо отриманий код файл Hello.java. Далі створимо Hello.bat файл такого змісту:
javac Hello.java
java-cp. Hello
pause
І помістимо його в одну папку із файлом Hello.java. Повинно вийти приблизно так:

Далі запускаємо отриманий Hello.bat файл і вуаля, у нас утворився файл Hello.class у тій же директорії, а на екран вивелося повідомлення «Привіт, світ!!!» у кодуванні CP866.

Для того, щоб дізнатися, яке кодування в даний момент використовується в консолі, потрібно набрати там «chcp». А щоб змінити кодування консолі, потрібно набрати «chcp<номер кодовой таблицы>» наприклад, «chcp 1251». Продемонструю використання цієї команди:

Примітка: якщо у Вас не знаходить команду javac, то заходимо (для Windows 7) "Мій комп'ютер" - "Властивості" - "Додаткові параметри системи" - "Змінні середовища", знаходимо "Системні змінні" і в змінну Path додаємо рядок, куди встановлена ​​JDK, наприклад "C:\Program Files\Java\jdk1.7.0_25\bin" - за замовчуванням.

Останнє оновлення: 27.10.2018

Найбільш простий спосіб взаємодії з користувачем представляє консоль: ми можемо виводити на консоль деяку інформацію або навпаки зчитувати з консолі деякі дані. Для взаємодії з консоллю в Java застосовується клас System, яке функціональність власне забезпечує консольне введення і виведення.

Виведення на консоль

Для створення потоку виведення у клас System визначено об'єкт out. У цьому об'єкті визначено метод println, який дозволяє вивести на консоль деяке значення з наступним переведенням консолі на наступний рядок. Наприклад:

Public class Program ( public static void main(String args) ( System.out.println("Hello world!"); System.out.println("Bye world..."); ) )

У метод println передається будь-яке значення, як правило, рядок, який треба вивести на консоль. І в даному випадку ми отримаємо такий висновок:

Hello world! Bye world...

При необхідності можна і не переводити курсор на наступний рядок. У цьому випадку можна використовувати метод System.out.print() , який аналогічний println за винятком, що не здійснює переведення на наступний рядок.

Public class Program ( public static void main(String args) ( System.out.print("Hello world!"); System.out.print("Bye world..."); ) )

Консольний висновок цієї програми:

Hello world!Bye world...

Але за допомогою методу System.out.print також можна здійснити переведення каретки на наступний рядок. Для цього треба використовувати escape-послідовність \n:

System.out.print("Hello world \n");

Нерідко необхідно підставляти у рядок якісь дані. Наприклад, у нас є два числа, і ми хочемо вивести їх значення на екран. І тут ми можемо, наприклад, написати так:

Public class Program ( public static void main(String args) ( int x=5; int y=6; System.out.println("x=" + x + "; y=" + y); ) )

Консольне виведення програми:

Але Java також має функцію для форматованого висновку, успадковану від мови С: System.out.printf() . З її допомогою ми можемо переписати попередній приклад так:

Int x=5; int y=6; System.out.printf("x=%d; y=%d\n", x, y);

У цьому випадку символи %d позначають специфікатор, замість якого підставляє один аргумент. Специфікаторів та відповідних їм аргументів може бути безліч. В даному випадку ми маємо лише два аргументи, тому замість першого %d підставляє значення змінної x, а замість другого - значення змінної y. Сама літера d означає, що цей специфікатор буде використовуватися для виведення цілісних значень.

Крім специфікатора %d, ми можемо використовувати ще ряд специфікаторів для інших типів даних:

    %x : для виведення шістнадцяткових чисел

    %f : для виведення чисел із плаваючою точкою

    %e : для виведення чисел в експоненційній формі, наприклад, 1.3e+01

    %c: для виведення одиночного символу

    %s : для виведення строкових значень

Наприклад:

Public class Program ( public static void main(String args) ( String name = "Tom"; int age = 30; float height = 1.7f; System.out.printf("Name: %s Age: %d Height: %). 2f \n", name, age, height); ) )

При виведенні чисел з плаваючою точкою ми можемо вказати кількість знаків після коми, для цього використовуємо специфікатор на %.2f, де.2 вказує, що після коми буде два знаки. У результаті ми отримаємо такий висновок:

Назви: Tom Age: 30 Height: 1,70

Введення з консолі

Для отримання введення з консолі класу System визначено об'єкт in . Однак безпосередньо через об'єкт System.in не дуже зручно працювати, тому зазвичай використовують клас Scanner , який, у свою чергу використовує System.in . Наприклад, напишемо маленьку програму, яка здійснює введення чисел:

Import java.util.Scanner; public class Program ( public static void main(String args) ( Scanner in = new Scanner(System.in); System.out.print("Input a number: "); int num = in.nextInt(); System.out .printf("Your number: %d \n", num); in.close(); ) )

Оскільки клас Scanner знаходиться в пакеті java.util , ми спочатку імпортуємо його за допомогою інструкції import java.util.Scanner .

Для створення самого об'єкта Scanner у його конструктор передається об'єкт System.in. Після цього ми можемо отримувати значення, що вводяться. Наприклад, у цьому випадку спочатку виводимо запрошення до введення і потім отримуємо число, що вводиться в змінну num.

Щоб одержати введене число, використовується метод in.nextInt(); , який повертає введене з клавіатури ціле значення.

Приклад роботи програми:

Input a number: 5 Your number: 5

Клас Scanner має ще ряд методів, які дозволяють отримати введені користувачем значення:

    next() : зчитує введений рядок до першого пропуску

    nextLine() : зчитує весь введений рядок

    nextInt() : зчитує введене число int

    nextDouble() : зчитує введене число double

    nextBoolean() : зчитує значення boolean

    nextByte() : зчитує введене число byte

    nextFloat() : зчитує введене число float

    nextShort() : зчитує введене число short

Тобто для введення значень кожного примітивного типу у класі Scanner визначено свій метод.

Наприклад, створимо програму для введення інформації про людину:

Import java.util.Scanner; Public class Program ( public static void main(String args) ( Scanner in = new Scanner(System.in); System.out.print("Input name: "); String name = in.nextLine(); System.out. print("Input age: "); int age = in.nextInt(); System.out.print("Input height: "); float height = in.nextFloat(); System.out.printf("Name: % s Age: %d Height: %.2f \n", name, age, height); in.close(); ) )

Тут послідовно вводяться дані типів String, int, float і всі введені дані разом виводяться на консоль. Приклад роботи програми:

Вхід Name: Tom Input age: 34 Input height: 1,7 Name: Tom Age: 34 Height: 1,70

Зверніть увагу для введення значення типу float (те саме відноситься до типу double) застосовується число "1,7", де роздільником є ​​кома, а не "1.7", де роздільником є ​​точка. У разі все залежить від поточної мовної локалізації системи. У моєму випадку російськомовна локалізація, відповідно вводити необхідно числа, де роздільником є ​​кома. Те саме стосується багатьох інших локалізацій, наприклад, німецької, французької тощо, де застосовується кома.

У цьому уроці ми поговоримо про формат виведення чисел Java. Навчимося виводити числа із заданою точністю.

Методи printf та format

Пакет java.io містить клас PrintStream, який містить ці два методи, ці методи можна використовувати замість print і println. Об'єкт System.out, який ви вже використовували - це об'єкт PrintStream, тому ви можете викликати методи PrintStream, використовуючи System.out. Наприклад: System. out. format (. . . . . ); Синтаксис методів однаковий: public PrintStream format (String format, Object. . . args) де format - це рядок, який визначає шаблон, згідно з яким відбуватиметься форматування, args - це список змінних, для друку за заданим шаблоном. Найпростіший приклад: System. out. format ("The value of " + "the float variable is " + "%f, while the value of the " + "integer variable is %d, " + "and the string is %s" , floatVar, intVar, stringVar) ; Рядок format містить звичайний текст та спеціальні форматуючі символи. Ці символи починаються зі знака відсотка (%) і закінчуються конвертером - символом, який визначає тип змінної форматування. Приклад: int i = 461012; System. out. format ("The value of i is: %d%n" , i) ; Специфікатор %d визначає одну десяткову цілу змінну. %n – перехід на нову лінію. Цей приклад виведе: The value of i is: 461012 ПрикладНаступна таблиця містить деякі прапори, які використовуються у програмі нижче.
Приклади використання цих конвертерів можна побачити далі. Ця програма показує різні варіанти використання методу format. Висновок показано у коментарях.

Клас DecimalFormat

Ви можете використовувати клас DecimalFormat для контролю виведення нулів у десяткових числах. Приклад:
Ця програма виведе: 123456.789 ###, ###. ### 123, 456.789 123456.789 ###. ## 123456.79 123.78 000000.000 000123.780 12345.67 $###, ###. ### $12 , 345.67 На цьому все! Посилання на першу