- •Оглавление
- •Предисловие
- •Введение
- •Глава 1. Средства разработки приложений
- •1.1. Системные требования
- •1.2. Введение в NetBeans
- •1.3. Установка NetBeans
- •1.4. Первый запуск NetBeans
- •1.5. Интерфейс пользователя
- •1.6. Настройки среды
- •1.7. Создание проекта
- •Глава 2. Язык программирования Java
- •2.1. Первое приложение
- •2.2. Метод main
- •2.3. Основные понятия языка Java
- •2.3.1. Переменные и константы
- •2.4. Примитивные типы данных
- •2.4.1. Целые и символьные типы(byte, short, char, int, long)
- •2.4.2. Логический тип Boolean
- •2.4.3. Вещественные типы (float и double)
- •2.5. Ссылочные типы
- •2.6. Выражения и операторы
- •2.6.1. Логические операторы
- •2.6.2. Целочисленные битовые операторы
- •2.6.3. Арифметические операторы
- •2.6.4. Приоритеты выполнения операторов
- •2.6.5. Преобразование типов
- •2.6.6. Оболочечные классы
- •2.7. Класс Math
- •2.8. Сложные типы данных и строки
- •2.8.1. Массивы
- •2.8.2. Строки
- •2.9. Управляющие конструкции
- •2.9.1. Составной оператор
- •2.9.2. Условный оператор if
- •2.9.3. Оператор выбора
- •2.9.4. Операторы цикла
- •2.9.5. Операторы перехода
- •Глава 3. Введение в ООП
- •3.1. Основные принципы ООП
- •3.2. Состав структура и основные свойства классов
- •3.2.1. Описание полей класса
- •3.2.2. Оператор new
- •3.2.3. Описание методов
- •3.2.4. Модификаторы
- •3.2.5. Конструкторы
- •Совмещение методов
- •Глава 4. Рефакторинг
- •Глава 5. Ввод и вывод в Java
- •Глава 6. Графический интерфейс пользователя GUI
- •6.1. Компоненты и контейнеры
- •6.2. Встроенные пакеты GUI классов на основе библиотеки awt
- •6.2.1. Метка Label
- •6.2.2. Кнопка Button
- •6.2.3. Кнопка выбора CheckBox
- •6.2.4. Радио-кнопка Radiobutton
- •6.2.5. Поле ввода TextField
- •6.2.6. Поле ввода TextArea
- •6.3. Использование визуального редактора для проектирования ГИП
- •6.4. Графика в Java
- •6.5. Обработка событий
16if (a==0){
17JOptionPane.showMessageDialog(null, "Корней нет");
18} else {
19if (d==0){
20 |
x1 |
= -b/(2*a); |
21 |
x2 |
= x1; |
22 |
JOptionPane.showMessageDialog(null, "Дискриминант |
|
равен 0, x1 = x2 = "+x1); |
||
23 |
} else{ |
|
24 |
x1 |
= (-b+Math.sqrt(d))/(2*a); |
25 |
x2 |
= (-b-Math.sqrt(d))/(2*a); |
26 |
JOptionPane.showMessageDialog(null, "x1 = "+x1+";\nx2 |
|
= "+x2); |
|
|
27}
28}
29System.exit(0);
30}
31
}
32}В строке 4 объявляем переменные, где a,b,c предназначены для хранения коэффициентов уравнения, d – дискриминанта. Подсчитаем дискриминант по известной формуле b*b-4*a*c (12). Далее проверяем
условие (d<0) в строке 17, если оно выполнено, то корнями уравнения являются комплексные числа (13, 14), иначе (если d>=0) проверим еще одно условие (a=0) (16). Если оно выполнено то корней нет (17). Далее проверим еще вложенное условие (d=0), если оно выполнено то корни x1 = x2 = –b/2a, иначе проверяем условие (d>0). В случае если последнее условие выполнено то находим корни уравнения по формулам (24, 25).
В примере мы встретили новую управляющую конструкцию (условный оператор, строки 13-28), if(условие) {операторы1} else {операторы2}. Более подробно мы его рассмотрим в следующих разделах. Для понимания примера необходимо знать, что если (условие) истинно (13), то выполняются группа операторов (14), иначе операторы (16-28).
2.8. Сложные типы данных и строки
2.8.1. Массивы
Массив это упорядоченный набор однородных переменных (поименованных ячеек памяти), доступ к которым осуществляется по индексу элемента.
Пример. Все элементы массива пронумерованы от 0. Если массив имеет имя nmass1, тогда для обращение к i-ому элементу массива необходимо использовать запись nmass1[i] (имя массива с номером (индексом) i в квадратных скобках).
Пример.
byte[] mas1; |
// массив mas1 байтовый |
int[] mas2; |
// массив |
mas2 |
целых |
|
double[][] mas3; |
// |
двумерный массив mas3 типа double |
||
Point[] mas4; |
// |
массив |
mas4 |
объектов Point |
Массивы могут принимать как простые значения примитивных
типов, так и сложные значения: объекты, другие массивы. Массивы относят к сложным, ссылочным типам данных.
Создание массивов
В отличии от создания объектов других типов, для массивов нет необходимости в задании отдельного класса или специального имени для объектного типа. Для объявления массива используется только имя базового типа и квадратные скобки:
byte[] byte_array;
Таким образом, создается переменная byte_array типа массив с заранее неизвестным количеством ячеек. Для того чтобы создать объект типа массив нужно использовать зарезервированное слово new и в квадратных скобках указать размер массива.
byte_array = new byte[100];
Операции объявления переменной и создание объекта типа массив можно объединить в одну операцию:
byte[] byte_array = new byte[100];
В Java массивы описанные таким образом, автоматически инициализируются значениями по умолчанию. В случае, если базовым типом массива является примитивный тип, то все элементы заполняются нулями, если логический, то значениями false, если объектный (ссылочный), то пустыми ссылками null.
Индексы элементов массива начинаются с 0, что часто является причиной ошибочной организации циклов. Длина каждого массива хранится в поле length, которое может быть вызвано непосредственно для любого массива:
byte_array.length;
Пример. Вывести на консоль кубы целых чисел от 0 до 100. Создайте новый класс с именем Cubes и введите предложенный ниже код:
public class Cubes {
public static void main(String[] args) { long[] a = new long[100];
for (int i = 0; i<a.length; i++){ a[i]=i*i*i; System.out.print(a[i]+" ");
}
}
}
На консоль будет выведено 100 кубов чисел в диапазоне от 0 до
100.
Применение массивов
Ссылка на элемент массива имя_массива[i], как мы рассматривали ранее, применяется для доступа к элементу массива. Часто начинающие в своих программах делают попытку обратиться к элементу, номер которого выходит за границы представленные в описании. Java не позволит этого и генерирует ошибку. Всякий раз, когда вы получаете доступ к элементу массива, Java автоматически проверяет допустимость использованного вами индекса.
Значения индексов массивов в Java представлены данными целого типа. Нельзя использовать в качестве индекса значения типа boolean, переменные вещественного типа, объекты, другие массивы.
Если вы имеете массив (переменную типа массив), и он инициализирован, тогда можно сопоставить этой переменной другой массив, при этом старый массив будет окончательно утерян. Например:
a = new int[17];
В данном случае в памяти выделится новая свободная область под массив из 17 элементов и переменной a будет сопоставлен этот массив. Переменная a будет иметь ссылку на первый элемент нового массива, а старый массив, состоящий из ста элементов типа Long, станет мусором. «Сборщик мусора» в процессе выполнения программы старается удалять не используемые данные.
Переменные типа массив можно присваивать друг другу, но при этом следует помнить, что происходит всего лишь присваивание адреса нулевой ячейке, а не элементов массива.
Например, создадим новую переменную b типа массив:
int[] b;
Пока она просто создана и ни на какой массив не имеет ссылки
Рис. 18 Ссылки переменных типа массив до операции присваивания
Операция
b=a; Присвоит переменной b адрес массива, на который ссылается переменная a.
Рис. 19. Ссылки переменных типа массив после операции присваивания
Таким образом, переменная b содержит тот же адрес массива, что и переменная a.
Многомерные массивы
Многомерные массивы в Java являются простыми массивами, элементы которых так же являются массивами. Задаются многомерные массивы с помощью указания необходимого количества открывающей и закрывающей квадратных скобок:
int[][] matrix = new int[5][8];
В данном примере создается двумерный массив (матрица), состоящий из пяти «строк» и восьми «столбцов». То есть создается массив из пяти элементов, и каждый из этих элементов является массивом, содержащим по восемь элементов, таким образом получается «матрица». Обращение к элементам осуществляется с помощью уже двух индексов.
Для примера выведем на консоль матрицу 10х10 случайных чисел от 0 до 1000.
Создайте новый класс Matrix и введите предложенный в листинге
код:
public class Matrix {
public static void main(String[] args) { int[][] matrix = new int[10][10];
for (int i=0; i<10; i++){ for (int j=0; j<10; j++){
matrix[i][j]=(int)(1000*Math.random()); System.out.print(matrix[i][j]+" ");
}; System.out.println("");
};
}
}
После запуска на консоль будет выведено 100 случайных чисел в виде матрицы 10х10.
