
Лаб_4 Головков И.Е. 12002108 ООП
.docx
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ БЕЛОГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ (НИУ «БелГУ») ИНСТИТУТ ИНЖЕРЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ
КАФЕДРА ИНФОРМАЦИОННЫХ И РОБОТОТЕХНИЧЕСКИХ СИСТЕМ
Отчет по лабораторной работе №4
Вариант №5 Тема работы «Статические поля и методы. Работа с файлами» по дисциплине «Объектно-ориентированное программирование»
студента очного отделения
2 курса группы 12002108
Головкова Игоря Евгеньевича
Проверил:
Резников Н. Г.
Белгород 2022
Цель работы: ознакомиться с организацией двумерных массивов в языке Java. Приобрести практические навыки в чтении данных из внешних файлов и выводе данных во внешние файлы.
Общая постановка задачи:
1. Составить алгоритм, его блок-схему и программу для решения Вашего варианта задания на языке программирования Java.
2. В программе необходимо реализовать два класса. В первом классе должны быть описаны два статических поля для хранения размерности матрицы.
3. Первый класс должен содержать также следующие статические методы:
1) метод класса, запрашивающий у пользователя метод ввода матрицы (с клавиатуры или из файла).
2) метод класса для ввода исходной матрицы с клавиатуры
3) метод класса для чтения из файла;
4) метод класса для вычисления элементов массива Х;
5) метод класса для вывода на экран исходной матрицы;
6) метод класса для вывода на экран вычисленного массива Х;
7) метод класса для записи в файл вычисленного массива Х.
4. Во втором классе необходимо описать главный метод класса (main), в котором должны быть объявлены матрица А и массив Х и осуществлен вызов статических методов первого класса.
5. Оформить отчет по лабораторной работе, включающий
титульный лист;
цель работы;
постановку задачи для Вашего варианта;
блок-схему алгоритма;
текст программы на языке Java;
скриншоты результатов выполнения тестовых примеров;
ответы на контрольные вопросы.
Индивидуальные данные для выполнения работы:
Вариант №5. Дана матрица А(5х5). Определить массив Х из 5 элементов, каждый из которых равен наименьшему из элементов соответствующего столбца матрицы.
Листинг программы:
Файл 1:
import java.io.*; import java.util.InputMismatchException; import java.util.Scanner; public class Massiv { static Scanner read = new Scanner(System.in); public static int NUM_1 = 5, NUM_2 = 5; static int[][] arr = new int[NUM_1][NUM_2]; static int[] X = new int[NUM_1]; static byte vybor(){ byte choice; System.out.println("Хотите ввести с клавиатуры(1) или считать из файла(2)?"); choice = read.nextByte(); return choice; } static void vvod() { for (int i = 0; i < NUM_1; i++) { for (int j = 0; j < NUM_2; j++) { System.out.print("Введите значение №" + i + " " + j + ": "); arr[i][j] = read.nextInt(); } } } static void readFile(){ String path = "d://lab/file2.txt"; try { try (Scanner in = new Scanner(new File(path))) { for (int i = 0; i < NUM_1; i++) { for (int j = 0; j < NUM_2; j++) { arr[i][j] = in.nextInt(); } } } } catch (FileNotFoundException e) { System.out.println("Ошибка " + e + "! файл " + path + " не найден!"); } catch (InputMismatchException e) { System.out.println("Ошибка " + e + "! Несоответствие типов данных!"); } } static void writeFile(){ try { PrintStream print = new PrintStream(new FileOutputStream("d://lab/file3.txt")); System.setOut(print); for (int i = 0; i < NUM_1; i++) { System.out.print(X[i] + " "); } } catch(FileNotFoundException e) { e.printStackTrace(); } } static void vyvod_2() { System.out.println("Исходный массив: "); for (int i = 0; i < NUM_1; i++) { for (int j = 0; j < NUM_2; j++) { System.out.print (arr[i][j] + " "); } System.out.println(); } } static void vyvod_1() { System.out.println("Исходный массив: "); for (int i = 0; i < NUM_1; i++){ System.out.print(X[i] + " "); } } static void findMin(){ for (int i = 0; i < NUM_1; i++) { int mini = arr[i][0]; for (int j = 0; j < NUM_2; j++) { if (arr[i][j]<mini) mini = arr[i][j]; } X[i] = mini; } } }
Файл 2:
public class Main { public static void main(String[] args) { Massiv mas = new Massiv(); int[][] matr = new int[Massiv.NUM_1][Massiv.NUM_2]; int[] X = new int[Massiv.NUM_1]; boolean flag = false; while (!flag) { flag = true; switch (Massiv.vybor()) { case 1 -> Massiv.vvod(matr); case 2 -> Massiv.readFile(matr); case 3 -> Massiv.zapolnRandom(matr); default -> flag = false; } } Massiv.vyvod_2(matr); Massiv.findMin(matr, X); Massiv.vyvod_1(X); Massiv.writeFile(X); } }
Результаты работы java-приложения:
Ответы на контрольные вопросы:
1. Каковы принципы размещения в памяти многомерных массивов в
языке Java?
Задаётся ячейка типа N-мерный массив, а также создаётся и назначается этой ссылочной переменной массив, имеющий по первому индексу А элементов, а по второму Б (т. е. мы имеем А ячеек типа одномерный массив, каждая из которых ссылается на массив из Б целых чисел).
2. Как производится описание многомерных массивов?
Задание N-мерного массива целых чисел будет выглядеть так: int[]…[] a=new int[А]…[Б];
3. Как производится обращение к элементам многомерного массива?
Доступ к элементам N-мерного массива осуществляется указанием N индексов: a[0]…[1]= …;
4. Какими способами можно произвести заполнение многомерного
массива элементами?
Ввод с клавиатуры и чтение из файла
5. Что такое статические поля и методы?
Статические поля и методы – это поля и методы, принадлежащие классу. Они объявляются с ключевым словом static. Основное отличие от обычных полей и методов – для обращения к статическим полям не требуется создание объекта.
6. Каким образом выполняется чтение исходных данных из файла?
С помощью класса Scanner и указания пути к файлу для чтения
7. Каким образом выполняется запись в файл?
С помощью перенаправления потока и PrintStream