Ввод и вывод
Почти каждая программа что‑то получает на вход, что‑то вычисляет и выводит результат.
В консольных программах на Java вход обычно читается с клавиатуры, а вывод появляется в окне консоли.
Для этого чаще всего используются:
Scanner— для ввода;System.out— для простого вывода в консоль;PrintWriter— для вывода через отдельный объект (удобен в шаблонах и при записи в файл).
import java.util.Scanner;
public class SumExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int sum = a + b;
System.out.println(sum);
}
}
Краткая сводка
Ввод с клавиатуры:
Scanner in = new Scanner(System.in);
int a = in.nextInt(); // целое число
double x = in.nextDouble(); // число с дробной частью
String s = in.next(); // одно слово (до пробела)
String line = in.nextLine();// вся строка целиком
Вывод на экран:
println выводит значение и переводит строку.
print выводит без перевода строки.
printf позволяет настраивать формат вывода (количество знаков после запятой и т.п.).
Ввод с клавиатуры через Scanner
Чтобы пользоваться Scanner, его нужно импортировать и создать объект:
Дальше читаем значения по одному, в том порядке, в котором они заданы во входных данных задачи.
Чтение чисел
Чтение слов и строк
После чисел перед nextLine() часто нужно убрать остаток строки:
int n = in.nextInt();
in.nextLine(); // считываем перевод строки
String text = in.nextLine(); // теперь читаем полную строку
Вывод на экран: System.out и PrintWriter
System.out — готовый объект для вывода в консоль.
System.out.println("Ответ: " + 42);
System.out.print("Введите число: ");
System.out.printf("x = %.2f%n", 3.14159);
println— текст + перевод строки;print— без перевода строки (следующий вывод продолжится в той же строке);printf— форматированный вывод.
Примеры форматирования:
double x = 3.14159;
System.out.printf("x = %.2f%n", x); // x = 3.14
System.out.printf("x = %.3f%n", x); // x = 3.142
%.2f — число с 2 знаками после запятой, %.3f — с 3.
Иногда вместо прямого использования System.out создают объект PrintWriter поверх него. Это удобно, когда хочется передавать один объект вывода в методы или легко заменить консоль на файл.
import java.io.PrintWriter;
import java.util.Scanner;
public class SumWithPrintWriter {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
int a = in.nextInt();
int b = in.nextInt();
int sum = a + b;
out.println(sum);
out.close(); // отправляем буфер в консоль и закрываем писатель
}
}
Кратко про разницу:
System.out.println(...)проще, ничего создавать не нужно, этого хватает для большинства учебных программ;PrintWriter out = new PrintWriter(System.out)даёт отдельный объект вывода, который можно передавать в функции; вывод буферизуется, поэтому в конце обычно вызываютclose()илиflush().
Типичные шаблоны
Шаблон «прочитать → посчитать → вывести»
import java.util.Scanner;
public class SumExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int sum = a + b;
System.out.println(sum);
}
}
Чтение нескольких чисел и вывод результата с поясняющим текстом
import java.util.Scanner;
public class AverageExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double a = in.nextDouble();
double b = in.nextDouble();
double c = in.nextDouble();
double avg = (a + b + c) / 3.0;
System.out.println("Среднее: " + avg);
}
}
Вывод аккуратного дробного результата
import java.util.Scanner;
public class FormatOutputExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double distance = in.nextDouble();
double time = in.nextDouble();
double speed = distance / time;
System.out.printf("Скорость: %.2f%n", speed);
}
}
Что нужно запомнить
Для ввода с клавиатуры в консольных программах мы используем Scanner с System.in.
Для вывода на экран — System.out.print, System.out.println, при необходимости System.out.printf.
Если нужен отдельный объект вывода (для передачи в методы или записи не только в консоль), можно создать PrintWriter out = new PrintWriter(System.out) и печатать через out.println(...).
Порядок ввода в программе должен совпадать с порядком, в котором данные заданы во входе задачи.
Хороший базовый шаблон: сначала «прочитать», затем «посчитать», затем «вывести результат».