2. Консольный ввод/вывод

mygedz

Администратор
Сообщения
588
Оценка реакций
62
В Java можно выводить на консоль информацию или считывать с консоли данные. Для взаимодействия с консолью применяется класс System, а его функциональность собственно, обеспечивает консольный ввод и вывод.

Вывод на консоль

Для создания потока вывода в класс System определен объект out. В этом объекте определен метод print.
Java:
public class Main {

    public static void main(String[] args) {

        System.out.print("Hello world!");
        System.out.print("Hello world!");
    }
}
Вывод будет следующий:
Java:
Hello world!Hello world!

Чтоб сделать перевод на следующую строку, стоит использовать метод println.
Java:
public class Main {

    public static void main(String[] args) {

        System.out.println("Hello world!");
        System.out.print("Hello world!");
    }
}
Вывод будет следующий:
Java:
Hello world!
Hello world!
Но можно оставив метод print, перевести на другую строку с помощью escape-последовательности \n:
Java:
public class Main {

    public static void main(String[] args) {

        System.out.print("Hello world! \n");
        System.out.print("Hello world!");
    }
}
В Java есть функция для форматированного вывода System.out.printf().
Java:
public class Main {

    public static void main(String[] args) {

        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: для вывода строковых значений

Java:
public class Main {

    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);
    }
}
 
Последнее редактирование:

mygedz

Администратор
Сообщения
588
Оценка реакций
62
Ввод с консоли

Для получения ввода с консоли в классе System определен объект in. Но как правило, используют класс Scanner, который, использует System.in.
Java:
import java.util.Scanner;

public class Main {

    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);
    }
Класс Scanner находится в пакете java.util, поэтому вначале он импортируется с помощью инструкции import java.util.Scanner.
Для создания самого объекта Scanner в его конструктор передается объект System.in.
Чтобы получить введенное число, используется метод in.nextInt();, который возвращает введенное с клавиатуры целочисленное значение.

Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:
  • next(): считывает введенную строку до первого пробела
  • nextLine(): считывает всю введенную строку
  • nextInt(): считывает введенное число int
  • nextDouble(): считывает введенное число double
  • nextBoolean(): считывает значение boolean
  • nextByte(): считывает введенное число byte
  • nextFloat(): считывает введенное число float
  • nextShort(): считывает введенное число short
То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.
Java:
import java.util.Scanner;

public class Main {

    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);
    }
}
 

mygedz

Администратор
Сообщения
588
Оценка реакций
62
Интересный пример по работе с методом printf
Java:
import java.util.Date;

public class Main {

    public static void main(String[] args) {
        String s1 = "Hello,";
        String s2 = "brave";
        String s3 = "new";
        String s4 = "world";
        // Выводим в одну строку
        System.out.printf("%s %s %s %s\n", s1,s2,s3,s4);
        System.out.println("************************");
        // Выводим в несколько строк
        System.out.printf("%s\n%s\n%s\n%s\n", s1,s2,s3,s4);
        System.out.println("************************");

        int number = 123;
        // Просто выводим число - %d
        // Символ n - для перехода на следующую строку
        System.out.println("Просто выводим число ");
        System.out.printf("%d\n", number);

        // выводим число и указываем ширину строки - 8 символов
        System.out.println("Выводим число и указываем ширину строки - 8 символов");
        System.out.printf("%8d\n", number);

        // выводим число и указываем ширину строки - 8 символов
        // начало строки забиваем нулями
        System.out.println("Начало строки забиваем нулями");
        System.out.printf("%08d\n", number);
        System.out.println("************************");

        // Выводим символ - %c
        System.out.println("Выводим символ");
        System.out.printf("%c\n", s1.charAt(0));

        // Выводим символ - при помощи указания кода символа
        // символ H имеет код 72
        System.out.println("Символ с кодом 72 это ");
        System.out.printf("%c\n", 72);

        // Выводим символ - и указываем ширину строки - 8 символов
        System.out.println("Выводим символ - и указываем ширину строки - 8 символов");
        System.out.printf("%8c\n", s1.charAt(0));
        System.out.println("************************");

        // Выводим булевое значение - true или false
        System.out.println("Выводим булевое значение 5<6 ");
        System.out.printf("%b\n", 5 < 6);

        // Выводим булевое значение - true или false
        //и задаем ширину строки 8 символов
        System.out.println("Выводим булевое значение и задаем ширину строки 8 символов");
        System.out.printf("%8b\n", 6 < 5);

        System.out.println("************************");
        Date today = new Date();
        // Какой сегодня день месяца
        System.out.printf("Сегодня день месяца %td\n", today);

        // Какой сегодня месяц в году
        System.out.printf("Сегодня месяц в году %tm\n", today);

        // Какой сегодня год
        System.out.printf("Сегодня год (последние две цифры года) %ty\n", today);

        // Какая сегодня дата
        System.out.printf("Сегодня дата в формате dd/MM/yy %tD\n", today);

        // Какой сегодня год полностью
        System.out.printf("Сегодня год полностью %tY\n", today);

        // Текущее время - час-минута-секунда
        System.out.printf("Текущее время в формате hh/mm/ss %tT\n", today);

        // Текущяя дата - год-месяц-день
        System.out.printf("Текущая дата в формате YYYY-MM-dd %tF\n", today);

        // Текущий день месяца
        System.out.printf("Текущий день месяца %te\n", today);

        // Текущий месяц прописью
        System.out.printf("Текущий месяц прописью %tB\n", today);

        System.out.println("************************");
        // Вывод числа со знаком впереди
        System.out.printf("Число с плюслм впереди +%d\n", 1234);
        System.out.printf("Число с минусом впереди -%d\n", 4321);
        System.out.println("************************");

        // Десятичное число с точкой - %f
        System.out.println("Десятичное число с точкой");
        System.out.printf("%f\n", Math.PI);

        // Десятичное число с экспонентой - %e
        System.out.println("Десятичное число с экспонентой ");
        System.out.printf("%e\n", Math.PI);

        // Десятичное число с точкой - %f
        // устанавливаем количество знаков после запятой - 4
        System.out.println("Десятичное число с точкой и 4 знака после точки ");
        System.out.printf("%.4f\n", Math.PI);

        // устанавливаем количество знаков после запятой - 8
        System.out.println("Десятичное число с точкой и 8 знаков после точки ");
        System.out.printf("%.8f\n", Math.PI);

        // устанавливаем количество знаков после запятой - 4
        //  общее количество символов - 8
        System.out.println("Всего 8 знаков и 4 знако после точки ");
        System.out.printf("%8.4f\n", Math.PI);

        // Устанавливаем разделитель
        System.out.println("Устанавливаем разделитель между тысячами в целом числе");
        System.out.printf("%,d\n", 100000000);

        // Устанавливаем разделитель - знак запятой ','
        // но в русской локале запятая - это разделитель
        // по умолчанию - поэтому ничего не изменилось
        System.out.println("Десятичное число с точкой всего 6 знакво и 2 после точки ");
        System.out.printf( "%,6.2f", Math.PI);

    }

}
 
Верх Низ