Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готовые отчеты (2020) / Java. Лабораторная работа 5.pdf
Скачиваний:
62
Добавлен:
29.01.2021
Размер:
416.49 Кб
Скачать

}

pw.flush();

}

// Метод чтения вектора из символьного потока

public static IVector readVector(Reader in) throws IOException { StreamTokenizer token = new StreamTokenizer(in);

int t = token.nextToken();

IVector v = new Array((t != StreamTokenizer.TT_EOF) ? (int) token.nval : 0);

t = token.nextToken(); try {

for (int i = 0; t != StreamTokenizer.TT_EOF; ++i, t = token.nextToken()) {

if (t == StreamTokenizer.TT_NUMBER) { v.set(i, token.nval);

}

}

}

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

}

return v;

}

// Метод установки фабрики векторов

public static void setVectorFactory(VectorFactory arg) { factory = arg;

}

// Ссылка на текущую фабрику векторов

private static VectorFactory factory = new ArrayFactory();

}

Задание №6.

Вклассе Vectors создадим метод public static IVector

createInstance(int n), создающий с помощью текущей фабрики новый экземпляр вектора с указанным размером. В остальных методах класса Vectors заменим прямое создание экземпляров вектора на вызов этого метода (табл. 9).

Таблица 9 — Измененный код vectors/Vectors.java

package vectors;

import java.io.IOException; import java.io.Writer; import java.io.Reader; import java.io.InputStream; import java.io.OutputStream;

import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.PrintWriter; import java.io.StreamTokenizer;

public class Vectors {

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

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

12

IVector r = createInstance(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 sum(IVector array, IVector arg) throws IncompatibleVectorSizesException {

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

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

}

IVector r = createInstance(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;

}

// Метод записи вектора в байтовый поток

public static void outputVector(IVector v, OutputStream out) throws IOException {

DataOutputStream dos = new DataOutputStream(out); int len = v.size();

dos.writeInt(len); try{

for (int i = 0; i < len; ++i) { dos.writeDouble(v.get(i));

}

}

13

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

}

dos.flush();

}

// Метод чтения вектора из байтового потока

public static IVector inputVector(InputStream in) throws IOException { DataInputStream dis = new DataInputStream(in);

int len = dis.readInt();

IVector result = createInstance(len); try {

for (int i = 0; i < len; ++i) { result.set(i, dis.readDouble());

}

}

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

}

return result;

}

// Метод записи вектора в символьный поток

public static void writeVector(IVector v, Writer out) throws IOException

{

PrintWriter pw = new PrintWriter(out); int len = v.size();

pw.print(len); try{

for (int i = 0; i < len; ++i) { pw.print(' '); pw.print(v.get(i));

}

}

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

}

pw.flush();

}

// Метод чтения вектора из символьного потока

public static IVector readVector(Reader in) throws IOException { StreamTokenizer token = new StreamTokenizer(in);

int t = token.nextToken();

IVector v = createInstance((t != StreamTokenizer.TT_EOF) ? (int) token.nval : 0);

t = token.nextToken(); try {

for (int i = 0; t != StreamTokenizer.TT_EOF; ++i, t = token.nextToken()) {

if (t == StreamTokenizer.TT_NUMBER) { v.set(i, token.nval);

}

}

}

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

}

return v;

}

// Метод установки фабрики векторов

public static void setVectorFactory(VectorFactory arg) { factory = arg;

}

14