Материал: Java. Лабораторная работа 3

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

public void add(int i, double elem) throws VectorIndexOutOfBoundsException {

if (i >= 0 && i <= size) { if (i != 0) {

Node temp = head;

for (int j = 1; j < i; ++j) { temp = temp.next;

}

temp.next = new Node(elem, temp.next); } else {

head = new Node(elem, head);

}

++size; return;

}

throw new VectorIndexOutOfBoundsException("VectorIndexOutOfBoundsException", i);

}

// Удаление элемента из списка

public void remove(int i) throws VectorIndexOutOfBoundsException { if (i >= 0 && i < size) {

if (i != 0) {

Node temp = head;

for (int j = 1; j < i; ++j) { temp = temp.next;

}

temp.next = temp.next.next; } else {

head = head.next;

}

--size; return;

}

throw new VectorIndexOutOfBoundsException("VectorIndexOutOfBoundsException", i);

}

//Нахождение нормы Евклида public double normEuclidean() {

double r = 0;

for (Node temp = head; temp != null; temp = temp.next) { r += temp.value * temp.value;

}

return Math.sqrt(r);

}

//Вывод всех элементов списка

public void print() { Node temp = head; if (temp != null) {

System.out.print(temp.value); temp = temp.next;

}

for (; temp != null; temp = temp.next) { System.out.print(" " + temp.value);

}

System.out.println();

}

// Класс "Узел"

public static class Node {

public Node(double value, Node next) { this.value = value;

this.next = next;

16

}

public double value; public Node next;

}

private Node head; private int size;

}

Результат компиляции и запуска приведен на рис. 6.

Рисунок 6 — Компиляция и запуск Task3.java Задание №7.

Изменим класс Vectors так, чтобы он работал с классами, реализующими интерфейс IVector, а также дополним примеры (табл. 13, 14). Таблица 13 — Измененный код vectors/Vectors.java

package vectors;

public class Vectors {

// Умножение вектора на число

public static IVector mul(IVector array, double number) { int size = array.size();

IVector r = new Array(size); try {

for (int i = 0; i < size; ++i) { r.set(i, array.get(i) * number);

}

}

catch(Exception e) { System.out.println(e.getMessage());

}

return r;

}

// Сложение двух векторов

public static IVector add(IVector array, IVector arg) throws IncompatibleVectorSizesException {

int size = array.size(); if (size != arg.size()) {

17

throw new IncompatibleVectorSizesException("IncompatibleVectorSizesException", array.size(), arg.size());

}

IVector r = new Array(size); try{

for (int i = 0; i < size; ++i) { r.set(i, array.get(i) + arg.get(i));

}

}

catch(Exception e) { System.out.println(e.getMessage());

}

return r;

}

// Скалярное произведение двух векторов

public static double mul(IVector array, IVector arg) throws IncompatibleVectorSizesException {

int size = array.size(); if (size != arg.size()) {

throw new IncompatibleVectorSizesException("IncompatibleVectorSizesException", array.size(), arg.size());

}

double r = 0; try {

for (int i = 0; i < size; ++i) {

r += array.get(i) * arg.get(i);

}

}

catch(Exception e) { System.out.println(e.getMessage());

}

return r;

}

}

Таблица 14 — Измененный код Task3.java

import vectors.*;

public class Task3 { // Точка входа

public static void main(String[] args) throws Exception { Array a = new Array(3), b = new Array(5);

ForwardList c = new ForwardList(3), d = new ForwardList(5); a.set(0, 2);

a.set(1, 1); a.set(2, 0); c.set(0, 2); c.set(1, 1); c.set(2, 0); b.set(0, 5); b.set(1, 4); b.set(2, 3); b.set(3, 2); b.set(4, 1); d.set(0, 5); d.set(1, 4); d.set(2, 3); d.set(3, 2); d.set(4, 1);

System.out.print("a: "); a.print();

18

System.out.print("b: "); b.print(); System.out.print("c: "); c.print(); System.out.print("d: "); d.print();

System.out.println("a.size(): " + a.size()); System.out.println("b.size(): " + b.size()); System.out.println("a.normEuclidean(): " + a.normEuclidean()); System.out.println("b.normEuclidean(): " + b.normEuclidean()); System.out.println("Vectors.mul(a, c): " + Vectors.mul(a, c)); System.out.println("Vectors.mul(b, d): " + Vectors.mul(b, d)); System.out.print("a * 2.5: ");

Vectors.mul(a, 2.5).print(); System.out.print("a + c: "); Vectors.add(a, c).print(); System.out.print("b + d: "); Vectors.add(b, d).print();

}

}

Результат компиляции и запуска приведен на рис. 7.

Рисунок 7 — Компиляция и запуск Task3.java Заключение

В результате выполнения лабораторной работы мы ознакомились с механизмом исключений и концепцией интерфейсов.

19

Источник: https://studfile.net/preview/16431617/