Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Java > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 28.11.2017, 17:49   #1
АлексейP
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 17
По умолчанию Java. Классы.

Привет.

Задание подробно в приложении, там же ввод и вывод, которые должны получиться.
Первые два задания у меня прошло, третье - ошибка. Собственно, насколько я понимаю, он просит в методе
Код:
vC.length()
вывести 1.0, но это в принципе не возможно, т.к. начальные значения полей объекта vC равны значениям полей объекта vB, а затем значения vC изменяются.

Собственно, мой код. Разница в том, что в выводе, в
Код:
vC.length()
мне выдает 12.90348790056394, а проверка просит 1.0.

Код:
import java.util.Locale;

public class Vector2D {
	public double vX;
	public double vY;
	static int count;
	
	Vector2D(){
		vX = 1;
		vY = 1;
		count++;
	}
	
	Vector2D(double X, double Y){
		vX = X;
		vY = Y;
		count++;
	}
	
	Vector2D(Vector2D Vector2D){
		vX = Vector2D.vX;
		vY = Vector2D.vY;
		count++;
	}
	
	void print(){
		System.out.println("(" + String.format(Locale.US, "%.2f", vX)+ ", " + String.format(Locale.US, "%.2f", vY) + ")");
	}
	
	double length() {
		return Math.sqrt(vX * vX + vY * vY);
	}
	
	void add(Vector2D v) {
		vX += v.vX;
		vY += v.vY;
	}
	
	void sub(Vector2D v) {
		vX -= v.vX;
		vY -= v.vY;
	}
	
	void scale(double scaleFactor) {
		vX *= scaleFactor;
		vY *= scaleFactor;
	}
	
	double normalized() {
		return Math.sqrt(vX * vX + vY * vY);
	}
	
	double dotProduct(Vector2D v) {
		return ((v.vX * vX + v.vY * vY) < 0 ? (v.vX * vX + v.vY * vY) * (-1) :  (v.vX * vX + v.vY * vY));
	}
	
	public static void main(String[] args) {
		Vector2D vA = new Vector2D();
		Vector2D vB = new Vector2D(5.0, 7.0);
		Vector2D vC = new Vector2D(vB);
		vA.add(vB);
		vA.print();
		vA.sub(vC);
		vA.print();
		System.out.println(vB.length());
		vC.scale(1.5);
		vC.print();
		vC.normalized();
		System.out.println(vC.length());
		vC.scale(2);
		System.out.println(vA.dotProduct(vB));
		System.out.println(count);

	}
}
В чем моя ошибка?
Изображения
Тип файла: png rhtr.png (57.4 Кб, 155 просмотров)
Тип файла: png Безымянный.png (13.9 Кб, 94 просмотров)
АлексейP вне форума Ответить с цитированием
Старый 28.11.2017, 17:53   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,097
По умолчанию

Цитата:
вывести 1.0, но это в принципе не возможно
Это другое в принципе невозможно. Читайте еще раз. Нормализация вектора - это не вычисление его длины.
Пишу программы на С++. ТЗ, цену и сроки на p51x.fr {@} яндекс.ру
p51x вне форума Ответить с цитированием
Старый 28.11.2017, 19:22   #3
АлексейP
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 17
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Это другое в принципе невозможно. Читайте еще раз. Нормализация вектора - это не вычисление его длины.
Ну, хорошо. Чтобы нормализовать вектор, нужно каждую его координату поделить на длину вектора. Имеем:
Код:
void normalized() {
        vX /= length();
        vY /= length();
    }
Ответ 1.155328053082596
АлексейP вне форума Ответить с цитированием
Старый 28.11.2017, 19:25   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,097
По умолчанию

И что вернет второй вызов length? Исходную длину или с уже пофигаченной одной координатой?

Нормализация - это преобразование вектора в вектор с длиной 1. Если она не 1 вы что-то делаете не так.
Пишу программы на С++. ТЗ, цену и сроки на p51x.fr {@} яндекс.ру
p51x вне форума Ответить с цитированием
Старый 02.12.2017, 20:46   #5
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Код:
void normalized() {
    double len = length();
    vX /= len;
    vY /= len;
}
P.S.: после изменения vX метод length() вернет длину "другого вектора", а не того, который вы пытаетесь нормализовать.
BleStaR вне форума Ответить с цитированием
Старый 03.12.2017, 08:56   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,097
По умолчанию

BleStaR, вы посты по старым темам набиваете?
Пишу программы на С++. ТЗ, цену и сроки на p51x.fr {@} яндекс.ру
p51x вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] Java+ сборка Gradle не импортируются классы DimitriySam Общие вопросы по Java, Java SE, Kotlin 0 30.04.2017 18:53
Java. Классы. Создание объектов класса в цикле Антон Лысенко Помощь студентам 0 06.04.2014 03:02
Классы файловых потоков Java shmat_ru Общие вопросы по Java, Java SE, Kotlin 3 02.12.2013 20:28
Абстрактные классы в Java. Вопросс по классу Process. dar3dev1l26 Помощь студентам 0 31.07.2013 14:42
Классы и методы в JAVA KIKSa Помощь студентам 0 07.04.2013 19:22