скачать книгу бесплатно
В программировании мы видели переменные, которые позволяют хранить значения.
Здесь размеры также могут отличаться в зависимости от того, хотим ли мы сохранить логическое значение или число с плавающей запятой.
Однако в некоторых случаях нам может понадобиться упорядоченный набор значений одного и того же типа.
Например, когда мы хотим хранить оценки учеников класса, или температуры каждого дня месяца.
Точно так же, как мы могли бы арендовать ряд ячеек, нам может потребоваться зарезервировать набор или массив переменных одного и того же типа.
Как нам к этим переменным обращаться?
Мы привыкли свободно выбирать имена переменных.
И таким же образом мы можем дать имя массиву переменных.
Для обозначения местоположения одной переменной используется индекс.
Так, например, мы могли бы назвать массив a.
Предположим, что у него четыре элемента в четырех позициях.
Мы будем ссылаться на каждую позицию, добавляя индекс в квадратные скобки.
Обратите внимание, что мы начинаем с индекса 0 и увеличиваем его на единицу.
Здесь мы видим примеры массивов.
Массивы могут содержать разные типы значений, но в каждом массиве, тип является одинаковым для всех значений.
Массив может иметь любую длину, но после определения длины при создании массива его длина остается фиксированной.
Надо помнить, что есть два шага при работе с массивами. Объявление массива и его создание.
Элементы в массиве можно получить с помощью индекса.
Мы не должны путать значение элемента с его индексом.
Еще одна вещь, которую следует помнить, это то, что первым элементом массива является элемент с индексом 0.
Таким образом, индексы начинаются с 0 и до длины массива минус 1.
Мы объявляем массив, указывая тип элементов, затем открываем и закрываем квадратные скобки, и затем указываем имя, которое мы выбрали для нашего массива.
После объявления, создавая массив с помощью ключевого слова new, мы физически резервируем для него место в памяти, как в почтовом отделении.
Мы также можем сделать это вместе: объявить и создать массив в одной строке.
Теперь мы можем хранить значения в разных позициях.
Как мы сохраняем значения?
Мы используем оператор присваивания, как раньше мы использовали его для переменных.
Имя массива с индексом используется, как мы раньше использовали идентификаторы переменных.
Мы также можем объявить, создать и инициализировать массив сразу, как мы видим здесь, в последней строке, используя фигурные скобки.
Обратите внимание, что в этом случае нам не нужно писать ключевое слово «new».
Теперь, если строки – это упорядоченные последовательности символов, вопрос, является ли строка и массив символов одним и тем же.
Это не так, хотя можно конвертировать одно в другое.
Другой вопрос заключается в том, может ли элемент массива быть массивом.
Здесь ответ да.
Таким образом, мы получаем то, что мы называем двумерными массивами.
Но возможны и многомерные массивы.
Таким образом, массивы – это упорядоченные последовательности элементов одно и того же типа.
И длина фиксируется при создании массива.
И элементы массива могут быть массивами.
Массивы и циклы for имеют нечто общее.
Массив состоит из последовательности данных, а цикл for выполняет выражения последовательно несколько раз подряд.
Здесь мы видим массив с четырьмя целыми числами от 0 до 3.
И ниже приведена структура цикла for, которая повторяет выражения четыре раза.
Теперь, если мы хотим сделать одно и то же преобразование для всех значений в массиве, цикл for является хорошим для этого способом.
Например, если применить операцию возведения в степень 2 к целому числу 3, получим 9.
Теперь представьте, что мы хотим применить эту операцию ко всем целым числам в массиве.
Цикл for поможет нам последовательно брать все значения в массиве и возводить их в степень 2, начиная с индекса 0 до индекса 3.
Другой пример – сложить все числа в массиве.
Если вы хотите сделать это для любой длины массива, используйте x. length вместо 4.
Перебор элементов массива в цикле for, начиная с индекса 0 до длины массива, настолько распространен, что для этого существует специальный цикл for.
В этом цикле for мы можем проинструктировать переменную elem последовательно использовать все элементы массива.
Представление данных и типы данных
Давайте посмотрим под капот калькулятора или компьютера, и посмотрим, как мы можем представлять данные.
И начнем с простого.
Давайте посмотрим на логические значения, потому что там есть только два значения, true и false.
Цифровые компьютеры состоят из электроники, которая может находиться только в одном из двух состояний.
Триггер – это базовая единица, которая может оставаться либо в одном положении, либо в другом.
Выход триггера остается в одном из этих двух состояний и будет оставаться там до тех пор, пока не появится сигнал для его изменения.
В действительности 1 может иметь нулевое напряжение, а другое состояние – пять вольт.
Но мы можем произвольно интерпретировать их как 0 и 1.
Поэтому мы можем сказать, что триггер может хранить один бит информации.
Теперь это именно то, что нам нужно, чтобы сохранить логическое значение, потому что логических значений также два, ложь и истина.
И мы, опять же, можем произвольно присвоить 0 false и 1 true.
Итак, мы говорим, что нам нужен бит, чтобы сохранить логическое значение.
Теперь, если у вас есть два триггера, мы можем сохранить два бита.
Если мы соберем их вместе, у нас будет четыре возможных комбинации: 0—0, 0—1, 1—0 и 1—1, поскольку каждый из них может иметь состояние 0 или 1 независимо друг от друга.
И если мы возьмем восемь триггеров, чтобы сохранить восемь бит, у нас будет 2 в степени 8 различных комбинаций.
То есть 256 комбинаций в целом.
Что мы можем с ними делать?
Восемь бит называется байт.
Итак, что мы можем сделать с байтом?
Мы можем представить 256 различных чисел.
Например, натуральные числа от 0 до 255.
Мы также можем отображать 256 уровней красного, от черного до ярко-красного.
И мы можем получить любой цвет, составляя уровни красного, зеленого и синего.
Для каждого из этих компонентов мы используем один байт.
Таким образом, это всего три байта или 24 бита, что означает 2 в степени 24, что почти 17 миллионов цветовых комбинаций.
Звуки, фильмы, все представлено битами 0 и 1.
Это позволяет нам иметь богатую информацию, но в тоже время иметь единый способ обработки этой информации.
Наконец, мы можем также представлять отдельные символы, как те, которые есть у вас на клавиатуре, а также некоторые другие специальные символы.
Для этого существует множество кодировок.
Java использует кодировку юникода, использующую 16 бит.
Другие кодировки используют только восемь бит.
Таким образом, все в компьютере представлено битами.
Все сводится к нулям и единицам.
Давайте сосредоточимся на том, как мы представляем числа в двоичной форме битами.
С 1 байтом – 8 бит – мы можем сформировать 256 различных комбинаций, или 2 в степени 8.
Поэтому мы можем представить 256 различных чисел.
Это могут быть, например, натуральные числа от 0 до 255.
Но какая комбинация байт соответствует какому числу?
Давайте проанализируем систему, которую мы используем для представления чисел в нашей десятичной системе, которая использует 10 цифр, от 0 до 9.
Используем систему, основанную на весах.
Чем больше мы двигаемся влево, тем выше вес.
Когда мы пишем 972, мы имеем в виду 9 умножить на 100 плюс 7 умножить на 10 плюс 2.
Так как здесь основание 10, система исчисления называется десятичной.
Для двоичной системы исчисления тот же принцип, только основанием будет 2.
Соответственно, перевести число из двоичной системы в десятичную очень просто, нужно сложить получившийся ряд.
Перевести число из десятичной системы в двоичную тоже просто, нужно делить на 2 и записывать остаток.
Но как насчет отрицательных чисел? Нам тоже нужно работать с ними.
Неотрицательные числа, т. е. 0 и положительные числа – закодированы по-прежнему, где самый левый бит установлен в 0.