В настоящее время умение писать Java-программы [1] является очень актуальным и востребованным [2]. При этом предпочтительно использование различных сред разработки, например, NetBeans, существенно ускоряющих процесс написания программ, их отладку и верификацию [3].
Рассмотрим процесс реализации оконных и консольных Java-программ для работы с массивами данных в среде NetBeans при решении следующих типовых задач:
1. Дан одномерный массив целых чисел, состоящий из 8-ми элементов, заполнить его с клавиатуры.
Требуется:
- найти сумму отрицательных элементов, кратных числу k, а также количество чисел, равных k (k вводить с клавиатуры);
- найти номер первого четного элемента массива, значение которого не превышает k, если таковой имеется;
- заменить элементы, значения которых лежат в числовом диапазоне [5; 9], нулями.
Java-код решения задачи для запуска на консоли имеет вид:
System.out.println("Введите массив:");
int[] mas = new int[8];
Scanner scan = new Scanner(System.in);
for (int i = 0; i < 8; i++) {
System.out.print("mas[" + (i+1) + "] = ");
mas[i] = scan.nextInt();
}
int sum = 0, kol = 0, num = -1, k;
System.out.println("Введите k: ");
k = (new Scanner(System.in)).nextInt();
for (int i = 0; i < 8; i++) {
if ((mas[i] < 0) && (Math.abs(mas[i]) % k == 0)) {
sum += mas[i];
}
if (mas[i] == k) {
kol++;
}
if ((num == -1) && (mas[i] % 2 == 0) && (mas[i] != 0) && (mas[i] <= k)) {
num = i;
}
if ((mas[i] >= 5) && (mas[i] <= 9)) {
mas[i] = 0;
}
}
num++;
System.out.println("Сумма: " + sum);
System.out.println("Количество: " + kol);
System.out.println("Номер: " + num);
System.out.println("Новый массив:");
for (int i = 0; i < 8; i++) {
System.out.print(mas[i] + "\t");
}
2. Дан двумерный массив A размером 4 × 4, заполненный целыми числами.
Требуется сформировать одномерный массив B, каждый элемент которого равен округленному среднему значению соответствующей строки массива A.
Java-код решения задачи для запуска на консоли имеет вид:
int m1[][] = new int[4][4];
int m2[] = new int[4];
System.out.println("Массив A:");
for (int i = 0; i < 4; i++) {
double sr = 0;
for (int j = 0; j < 4; j++) {
m1[i][j] = (int) (Math.random()*10);
if (j < 3){
System.out.print(m1[i][j] + "\t");
} else{
System.out.println(m1[i][j]);
}
sr += m1[i][j];
}
m2[i] = (int) Math.round(sr/4);
}
System.out.println("Массив B:");
for (int i = 0; i < 4; i++) {
if (i < 3){
System.out.print(m2[i] + "\t");
} else{
System.out.println(m2[i]);
}
}
В коде управляющий символ \t предназначен для вставки символов табуляции между элементами массива.
3. Дан двумерный массив размером n × m, заполненный случайными числами в промежутке [-4; 10).
Требуется определить, существует ли в массиве строка, содержащая только положительные элементы.
Java-код решения задачи для запуска на консоли имеет вид:
boolean o = false;
Scanner scan = new Scanner(System.in);
System.out.print("Введите n: ");
int n = scan.nextInt();
System.out.print("Введите m: ");
int m = scan.nextInt();
int m1[][] = new int[n][m];
for (int i = 0; i < n; i++) {
boolean b = true;
for (int j = 0; j < m; j++) {
m1[i][j] = (int)(Math.random()*14 — 4);
if (j < m — 1){
System.out.print(m1[i][j] + "\t");
} else{
System.out.println(m1[i][j]);
}
if (m1[i][j] <= 0) {
b = false;
}
}
if (b) {
o = true;
}
}
if (o) {
System.out.println("Ответ: да.");
} else {
System.out.println("Ответ: нет.");
}
Для реализации оконного Java-приложения, реализующего решение указанных выше заданий, в NetBeans, помимо стандартных компонентов для ввода/вывода данных, таких как JLabel и JTextField, используется компонент JTable для работы с таблицами, а также кнопки JButton, предназначенные для выполнения расчетов.
Компоненты желательно группировать, исходя из их принадлежности к тому или иному заданию, используя для этого компоненты JTabbedPane и JPanel.
Компонент jPanel1 содержит следующие компоненты:
- jTextField1 — текстовое поле, используемое для ввода числа k;
- jTextField2, jTextField3 и jTextField4 — текстовые поля, предназначенные для вывода результатов расчетов;
- jLabel1, …, jLabel4 — надписи, используемые для идентификации текстовых полей;
- jTable1 — таблица, в которую вводится исходный массив;
- jTable2 — таблица, в которую выводится измененный массив.
Компонент jPanel2 содержит следующие компоненты:
- jTextField5, jTextField6 — текстовые поля, предназначенные для ввода значений n и m соответственно;
- jLabel5 и jLabel6 — надписи, используемые для идентификации текстовых полей;
- jTable3 — таблица, в которую вводится исходный массив;
- jTable4 — таблица, в которую выводится новый массив;
- jLabel7 — надпись, в которую будет записываться ответ на вопрос задания;
- jButton4 — кнопка, которая генерирует новый двумерный массив, согласно значениям n и m.
Все таблицы форм настроены нужным образом в редакторе моделей таблиц. В заголовке формы содержится название работы.
Оконные формы разработанного приложения изображены на рис. 1 и 2, из которых следует, что решение задания №1 реализовано на одной панели (вкладке), а решения заданий №2 и №3 — на другой.


Методы для обработки событий mouseClicked, по сути, повторяют аналогичные методы программы, разработанной для консоли. Так, метод обработки события mouseClicked для кнопки jButton1, где реализовано решение задания №1, имеет вид:
int[] mas = new int[8];
for (int i = 0; i < 8; i++) {
mas[i] = Integer.parseInt(jTable1.getValueAt(0, i).toString());
}
int sum = 0, kol = 0, num = -1;
for (int i = 0; i < 8; i++) {
if ((mas[i] < 0) && (Math.abs(mas[i]) % 4 == 0)) {
sum += mas[i];
}
if (mas[i] == Integer.parseInt(jTextField1.getText())) {
kol++;
}
if ((num == -1) && (mas[i] % 2 == 0) && (mas[i] != 0) && (mas[i] <= Integer.parseInt(jTextField1.getText()))) {
num = i;
}
if ((mas[i] >= 5) && (mas[i] <= 9)) {
mas[i] = 0;
}
}
jTextField2.setText(String.valueOf(sum));
jTextField3.setText(String.valueOf(kol));
jTextField4.setText(String.valueOf(++num));
for (int i = 0; i < 8; i++) {
jTable2.setValueAt(mas[i], 0, i);
}
При необходимости можно заполнить таблицу jTable1 случайными значениями в момент запуска приложения, используя для этого событие windowOpened.
На рис. 3 показано окно приложения в момент работы с ним.
