(Java) Переменные. Форматы вывода


Компьютер был бы не нужен, если бы не имел возможности хранить у себя в памяти различную информацию и уметь обрабатывать однотипную информацию по одинаковым алгоритмам. 
Для того, чтобы создавать более интересные программы, надо научиться сохранять информацию в памяти компьютера. При этом нам необходимо научиться как-то обращаться к ячейкам памяти компьютера. 
В программировании, как и в жизни, чтобы обращение к какому-либо участку памяти компьютера происходит по имени. Используя это имя можно как читать информацию, так и записывать ее туда.

Переменная - это ячейка в памяти компьютера, которая имеет имя и хранит некоторое значение, соответсвующее типу.

Слово "переменная" говорит нам о том, что ее значение может меняться в ходе выполнения программы.  При сохранении нового значения переменной - старое стирается


Для компьютера вся информация - это данные в его памяти - наборы нулей и единиц (если проще, то любая информация в компьютере это просто числа, и обрабатывает он их одинаково). Тем не менее, нам известно, что с целыми и дробными числами работают по-разному. Поэтому в каждом языке программирования есть разные типы данных, для обработки которых используются разные методы.

Например,
целые переменные – тип int (от английского integer – целый), занимают 4 байта в памяти;
вещественные переменные, которые могут иметь дробную часть (тип float – от английского floating point – плавающая точка) , занимают 4 байта в памяти
символы (тип char – от английского character – символ), занимают 1 байт в памяти

Попробуем добавить в нашу программу, какую нибудь переменную.
Прежде чем использовать переменную, надо сказать компьютеру, чтобы он выдлелил под нее место в памяти. Для этого переменную необходимо объявить, то есть указать какого типа значения она будет хранить, и дать ей имя.
Также в случае необходимости можно присвоить ей начальные значения. 

Разберем для примера программу
public class Main {  
    public static void main(String[] args) {  
        int a=6, b;  //two variables of integer type were declared in variable a and immediately saved the value 6. Variable b was not set to the initial value; what will be in the memory in this case we do not know.
    }
}

А теперь попробуйте сами.

Попробуем написать калькулятор для простых чисел

Наша задача вывести на экран некоторое арифметическое выражение и заставить компьютер его подсчитать.
Например такое: 
5+7=12
Причем вместо 5 и 7 могут быть разные числа, зависящие от значений переменных a и b в программе.

В операторе вывода можно выводить не просто текст, но и значения переменных, а также результат арифметического выражения. Причем последовательность вывода может быть различной. Например, для того, чтобы вывести вышеуказанное выражение необходимо записать так:
System.out.print(a+"+"+b+"="+(a+b));
Если хотим вывести значение переменной, то просто необходимо указать ее имя без кавычек Если мы хотим вывести результат арифметического выражения, то достаточно просто записать правильно арифметическое выражение.

*** Углубленный материал: форматированный ввод ***
В форматной строке количество спецификаторов вывода не ограничено, главное для каждого спецификатора после форматной строки, через запятую перечислить все значения, которые будут подставляться вместо шаблона. Например: System.out.printf("%d+%d=%d",a,b,a+b); В форматной строке указаны три спецификатора для вывода вместо них целочисленных значений.  Порядок подстановки - прямой.  Т.е. вместо первого шаблона %d выведется значение переменной a; вместо второго -  значение переменной b; а  вместо третьего - значение выражения a+b А теперь напишем программу, которая выводит результат основных арифметических действий с данными переменными

Чтобы пользователь смог сам задавать значение переменной, необходимо иметь возможность вводить значения с клавиатуры. Для этого используется объект in, который записывается так:
Scanner in = new Scanner(System.in); 
Но для его работы надо сначала импортировать с помощью import java.util.Scanner

Для получения целочисленного значения используется  in.nextInt();, результат работы которого надо присвоить переменной.
Например, 
int a = in.nextInt();
Для других типов данных существуют другие методы: 
  • next(): считывает введенную строку до первого пробела
  • nextLine(): считывает всю введенную строку
  • nextInt(): считывает введенное число int
  • nextDouble(): считывает введенное число double
  • nextBoolean(): считывает значение boolean
  • nextByte(): считывает введенное число byte
  • nextFloat(): считывает введенное число float
  • nextShort(): считывает введенное число short

*** углубленный материал: для интересующихся языком Java ***
Дополнительные спецификаторы вывода позволяют управлять выводом чисел в определенных форматах.

Минимальная ширина поля
Пример:
%04d  - число будет выводится в 4-х позициях, если цифр будет меньше четырех, то первые будут нулями
int a=34; System.out.printf("%04d",a); //на экране: 0 0 3 4   
знак подчеркивания здесь поставлен специально для наглядного отображения вывода числа.   

%4d – то же самое, только вместо нулей будут пробелы
int a=34; System.out.printf(“%4d”,a); //на экране:     3 4 

Вывод с определенной точностью - используется для вывода вещественных чисел. По умолчанию вещественные числа выводятся с точностью до 6 знаков после запятой. Но бывают случаи, что нужно вывести с другой точностью. В этом случае необходимо указать сколько знакомест отвести под само число и сколько после запятой.
Например,
%9.3f   - вещественное число будет выведено в 9 позициях, с тремя символами после запятой.

double a=34.24356; System.out.printf("%9.3f",a); // на экране: _ _ _ 3 2 . 2 4 4

Попробуем на практике использовать данную информацию.

Этот материал предназначен для более углубленного изучения. Будем разбирать как выводить переменные используя оператор вывода на языке Java (printf)
*** Углубленный материал ***


Как же вывести значние переменной на экран?
Для это внутри форматной строки в операторе вывода, необходимо указать некий шаблон, на месте которого будет выведено значение переменной.
Какой именно шаблон использовать зависит от типа переменной. 
Данные шаблоны называются спецификаторами вывода и представлены в таблице. Приведено достаточное большое количество спецификатором. Все их запоминать не обязательно. 
В большинстве случаев мы будем использовать спецификаторы для вывода целых, вещественных чисел, а также символов и строк. Но Вы в любой момент можете вернуться к этому уроку и посмотреть нужный Вам шаблон.
 
Код Формат
%c Символ
%d Десятичное целое число со знаком
%i Десятичное целое число со знаком
%e Научный формат (строчная буква e)
%E Научный формат (прописная буква E)
%f Вещественное число с плавающей точкой 
%g В зависимости от того, какой формат короче, применяется либо %e, либо %f
%G В зависимости от того, какой формат короче, применяется либо %E, либо %f
%o Восьмеричное число со знаком
%s Строка символов
%u Десятичное целое число без знака
%x Шестнадцатеричное число без знака (строчные буквы)
%X Шестнадцатеричное число без знака (прописные буквы)
%p Указатель
%n Указатель на целочисленную переменную. Спецификатор вызывает присвоение этой целочисленной переменной количества символов, выведенных перед ним
%% Знак %                           

Дополнения:
Для вывода переменных типа short int  используется модификатор h (например, \(\%hd\))
Для вывода значений переменных типа long int используется модификатор l (например, \(\%ld\))
Модификатор L можно использовать как префикс перед спецификаторами e, f, g. Он означает, что на экран выводится значение типа long double.  (например, \(\%Lf\))

Разберем пример на практике

 

Чтобы  вывод вещественного числа был гарантирован с точкой в качестве разделителя, надо использовать американскую раскладку, которая подключается с помощью:
  Locale.setDefault(Locale.US);