Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/64: Рейтинг темы: голосов - 64, средняя оценка - 4.69
28 / 5 / 9
Регистрация: 06.03.2015
Сообщений: 105

Класс "Вектор " - Java

16.05.2016, 19:32. Показов 13406. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: Создайте на Java простые классы и продемонстрируйте их функции. Каждый класс должен иметь конструктор, атрибуты и методы.
Класс «вектор», который описывает вектор в 3-мерном декартовом пространстве:
- Вектор задается тремя координатами;
- Методы класса позволяют находить модуль вектора, умножать вектор на число, добавлять векторы, умножать скалярно и векторно на другой вектор.
Имею такой код. Помогите понять, как сделать.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Application {
 
    public static void main(String[] args) {
 
        Vector a = new Vector(13, 25, 4);
        Vector b = new Vector(43, -7, 11);
 
        ViewResult.showScalarResult(a.scalarProduct(b));
        ViewResult.showVectorResult(a.vectorProduct(b));
    }
}
 
class ViewResult{
    public static void showVectorResult(double[] result) {
        System.out.print("Векторное произведение векторов:[a,b]=<");
        for (int i = 0; i < result.length; i++) {
            System.out.print(result[i] + (i != 2 ? ";" : ">\n"));
        }
    }
 
    public static void showScalarResult(double d) {
        System.out.println("Скалярное произведение векторов: " + d);
    }
}
 
class Vector {
    private double[] array = new double[3];
 
    public Vector(double... x) {
        for (int i = 0; i < array.length; i++) {
            array[i] = x[i];
        }
    }
 
    public double[] vectorProduct(Vector vector) {
        double[] result = new double[3];
        for (int i = 0; i < 3; i++) {
            result[i] = this.array[(i + 1) % 3] * vector.array[(i + 2) % 3] - this.array[(i + 2) % 3] * vector.array[(i + 1) % 3];
        }
        return result;
    }
 
    public double scalarProduct(Vector vector) {
        double result = 0;
        for (int i = 0; i < 3; i++) {
            result += this.array[i] * vector.array[i];
        }
        return result;
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2016, 19:32
Ответы с готовыми решениями:

Базовый класс вектор на плоскости, производный класс вектор в пространстве
Товарищи программисты! Прошу у вас помощи с этими задачами. Сам в программировании не понимаю, но заставляют делать. Вторая задача В...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

Создать класс «Вектор в трехмерном пространстве» позволяющий вычислять сумму векторов, их разность и произведение вектор
Доброго времени суток зашедшим помочь. Создать класс «Вектор в трехмерном пространстве» позволяющий вычислять сумму векторов, их разность...

10
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
16.05.2016, 20:09
Лучший ответ Сообщение было отмечено miros_0571 как решение

Решение

По порядку:
Цитата Сообщение от miros_0571 Посмотреть сообщение
Каждый класс должен иметь конструктор, атрибуты и методы.
Класс вектор имеет все 3 пункта
Цитата Сообщение от miros_0571 Посмотреть сообщение
Вектор задается тремя координатами;
Есть такое
Java
1
new Vector(13, 25, 4);
Цитата Сообщение от miros_0571 Посмотреть сообщение
- Методы класса позволяют находить модуль вектора, умножать вектор на число, добавлять векторы, умножать скалярно и векторно на другой вектор.
Скалярно и векторно умеет (методы vectorProduct(), scalarProduct()).
Осталось добавить поиск модуля вектора и умножение вектора на число.
Собственно "модуль вектора"
Java
1
2
3
4
5
6
    public double Module(){
        double a = array[0];
        double b = array[1];
        double c = array[2];
        return Math.sqrt(a*a + b*b + c*c);
    }
Умножение вектора на число:
Java
1
2
3
 public Vector Multiply(int x){
        return new Vector(this.array[0]*x, this.array[1]*x,this.array[2]*x);
    }
1
28 / 5 / 9
Регистрация: 06.03.2015
Сообщений: 105
16.05.2016, 20:28  [ТС]
Ругается на sqrt
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class Application {
 
    public static void main(String[] args) {
 
        Vector a = new Vector(13, 25, 4);
        Vector b = new Vector(43, -7, 11);
 
        ViewResult.showScalarResult(a.scalarProduct(b));
        ViewResult.showVectorResult(a.vectorProduct(b));
    }
}
 
class ViewResult{
    public static void showVectorResult(double[] result) {
        System.out.print("Векторное произведение векторов:[a,b]=<");
        for (int i = 0; i < result.length; i++) {
            System.out.print(result[i] + (i != 2 ? ";" : ">\n"));
        }
    }
 
    public static void showScalarResult(double d) {
        System.out.println("Скалярное произведение векторов: " + d);
    }
    public static void showModuleResult(double[] result) {
        System.out.println("Модуль вектора : " );
    }
}
 
class Vector {
    private double[] array = new double[3];
 
    public Vector(double... x) {
        for (int i = 0; i < array.length; i++) {
            array[i] = x[i];
        }
    }
 
    public double[] vectorProduct(Vector vector) {
        double[] result = new double[3];
        for (int i = 0; i < 3; i++) {
            result[i] = this.array[(i + 1) % 3] * vector.array[(i + 2) % 3] - this.array[(i + 2) % 3] * vector.array[(i + 1) % 3];
        }
        return result;
    }
 
    public double scalarProduct(Vector vector) {
        double result = 0;
        for (int i = 0; i < 3; i++) {
            result += this.array[i] * vector.array[i];
        }
        return result;
    }
    public double Module(){
        double a = array[0];
        double b = array[1];
        double c = array[2];
        return sqrt (a*a + b*b + c*c) ;
    }
}
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
16.05.2016, 20:30
Лучший ответ Сообщение было отмечено miros_0571 как решение

Решение

Добавь в секцию импорта (в начале файла)
Java
1
import static java.lang.StrictMath.sqrt;
1
28 / 5 / 9
Регистрация: 06.03.2015
Сообщений: 105
16.05.2016, 20:35  [ТС]
Помогло...помогите с выводом результатов модуля и умножения вектора на число
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import static java.lang.StrictMath.sqrt;
 
public class Application {
 
    public static void main(String[] args) {
 
        Vector a = new Vector(13, 25, 4);
        Vector b = new Vector(43, -7, 11);
 
        ViewResult.showScalarResult(a.scalarProduct(b));
        ViewResult.showVectorResult(a.vectorProduct(b));
    }
}
 
class ViewResult{
    public static void showVectorResult(double[] result) {
        System.out.print("Векторное произведение векторов:[a,b]=<");
        for (int i = 0; i < result.length; i++) {
            System.out.print(result[i] + (i != 2 ? ";" : ">\n"));
        }
    }
 
    public static void showScalarResult(double d) {
        System.out.println("Скалярное произведение векторов: " + d);
    }
    public static void showModuleResult(double[] result) {
        System.out.println("Модуль вектора : " );
    }
    public static void showMultiplyResult(double[] result) {
        System.out.println("Умножение вектора на число : " );
    }
}
 
class Vector {
    private double[] array = new double[3];
 
    public Vector(double... x) {
        for (int i = 0; i < array.length; i++) {
            array[i] = x[i];
        }
    }
 
    public double[] vectorProduct(Vector vector) {
        double[] result = new double[3];
        for (int i = 0; i < 3; i++) {
            result[i] = this.array[(i + 1) % 3] * vector.array[(i + 2) % 3] - this.array[(i + 2) % 3] * vector.array[(i + 1) % 3];
        }
        return result;
    }
 
    public double scalarProduct(Vector vector) {
        double result = 0;
        for (int i = 0; i < 3; i++) {
            result += this.array[i] * vector.array[i];
        }
        return result;
    }
    public double Module() {
        double a = array[0];
        double b = array[1];
        double c = array[2];
        return sqrt (a*a + b*b + c*c) ;
    }
    public Vector Multiply(int x) {
        return new Vector(this.array[0]*x, this.array[1]*x,this.array[2]*x);
    }
}
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
16.05.2016, 22:02
Лучший ответ Сообщение было отмечено miros_0571 как решение

Решение

Цитата Сообщение от miros_0571 Посмотреть сообщение
Помогло...помогите с выводом результатов модуля и умножения вектора на число
НУ ТУТ ТО ЧЕГО ПОМОГАТЬ?????!!!!!!!!

Добавлено через 17 минут
Честно мне совсем не нравиться целый класс для вывода "текста в консоль"
Для вывода значений метода сделай так

Java
1
        System.out.println(b.Module()); //выводит модуль вектора b
метод Multiply вообще возвращает экземпляр класса Vector. Вывод на печать разве что с координатами.
1
28 / 5 / 9
Регистрация: 06.03.2015
Сообщений: 105
16.05.2016, 22:58  [ТС]
простите меня...у меня не получается....у нас было несколько уроков всего....поправьте код если вам не трудно....буду Вам премного благодарна если вы поможете мне
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
17.05.2016, 10:11
вот профессиональный класс вектор
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
public class Vector { 
 
    private int d;               // мерность вектора
    private double[] data;       // массив компонент вектора
 
//конструктор
public Vector(int d) {
        this.d = d;
        data = new double[d];
    }
//конструктор
public Vector(double... a) {
        d = a.length;
 
        data = new double[d];
        for (int i = 0; i < d; i++)
            data[i] = a[i];
    }
// узнать размерность
public int dimension() {
        return d;
    }
 
public double dot(Vector that) {
        if (this.d != that.d) throw new IllegalArgumentException("Dimensions don't agree");
        double sum = 0.0;
        for (int i = 0; i < d; i++)
            sum = sum + (this.data[i] * that.data[i]);
        return sum;
    }
 
public double magnitude() {
        return Math.sqrt(this.dot(this));
    }
public double distanceTo(Vector that) {
        if (this.d != that.d) throw new IllegalArgumentException("Dimensions don't agree");
        return this.minus(that).magnitude();
    }
public Vector plus(Vector that) {
        if (this.d != that.d) throw new IllegalArgumentException("Dimensions don't agree");
        Vector c = new Vector(d);
        for (int i = 0; i < d; i++)
            c.data[i] = this.data[i] + that.data[i];
        return c;
    }
public Vector minus(Vector that) {
        if (this.d != that.d) throw new IllegalArgumentException("Dimensions don't agree");
        Vector c = new Vector(d);
        for (int i = 0; i < d; i++)
            c.data[i] = this.data[i] - that.data[i];
        return c;
    }
 public double cartesian(int i) {
        return data[i];
    }
public Vector scale(double alpha) {
        Vector c = new Vector(d);
        for (int i = 0; i < d; i++)
            c.data[i] = alpha * data[i];
        return c;
    }
public Vector direction() {
        if (this.magnitude() == 0.0) throw new ArithmeticException("Zero-vector has no direction");
        return this.scale(1.0 / this.magnitude());
    }
 public String toString() {
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < d; i++)
            s.append(data[i] + " ");
        return s.toString();
   }
// для тестирования класса
 public static void main(String[] args) {
        double[] xdata = { 1.0, 2.0, 3.0, 4.0 };
        double[] ydata = { 5.0, 2.0, 4.0, 1.0 };
        Vector x = new Vector(xdata);
        Vector y = new Vector(ydata);
 
        System.out.println("   x       = " + x);
        System.out.println("   y       = " + y);
 
        Vector z = x.plus(y);
        StdOut.println("   z       = " + z);
 
        z = z.scale(10.0);
        System.out.println(" 10z       = " + z);
 
        System.out.println("  |x|      = " + x.magnitude());
        System.out.println(" <x, y>    = " + x.dot(y));
        System.out.println("dist(x, y) = " + x.distanceTo(y));
        System.out.println("dir(x)     = " + x.direction());
 
    }
    
}
1
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
17.05.2016, 13:00
Цитата Сообщение от SergioO Посмотреть сообщение
вот профессиональный класс вектор
Спасибо, весьма интересно к изучению.

Не по теме:

А девчушке вообще по ходу мозг сломал:)



SergioO, IllegalArgumentException() не указывается в сигнатуре потому что это потомок рантаймЭксепшена?(unchecked?)
1
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
17.05.2016, 13:09
Цитата Сообщение от 84 Посмотреть сообщение
IllegalArgumentException() не указывается в сигнатуре
что вы имеете в виду?
1
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
17.05.2016, 13:31
Java
1
public int read() throws IOException
если метод выкидывает Exception, то он должен об этом явно говорить либо обрабатывать исключение в теле метода (try/catch). Это касается только checked Exception. Так что вопрос мой был больше риторический
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2016, 13:31
Помогаю со студенческими работами здесь

Создать клас ВЕКТОР целых чисел. Разработать класс СТЕК, который вмещает объект класса ВЕКТОР
Создать клас ВЕКТОР целых чисел. Разработать класс СТЕК, который вмещает объект класса ВЕКТОР. Определить необходимые конструкторы, методы...

Создать класс определяющий матрицу использующий класс вектор
Создайте класс, определяющий матрицу (двумерный массив), использующий класс &quot;вектор&quot;, содержащий конструктор создания и...

Создать класс, полем которого является класс вектор
как это выглядит?

Создать класс, полями есть динамический вектор(то есть указатель на вектор) его размер и идентификатор
Задание нужно создать класс, полями есть динамический вектор(то есть указатель на вектор) его размер та идентификатор не получается в...

Базовый класс Массив и производный класс Вектор
Всем привет, помогите пожалуйста) Базовый класс Массив с полем «количество элементов» и методом «Проверка» — печатает сообщение об...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru