|
package point; //создаем собственный пакет
import java.util.Scanner;
class Point { //создаем класс Point
double x; // абсцисса точки
double y; // ордината точки
/* Далее - конструктор по умолчанию, его можно не описывать явно, тогда объект
будет создаваться, а его поля будут получать те значения
по умолчанию, что предусмотрены типом данных. Для int это 0, для
double это 0.0 и т.д.
*/
Point() {
x = 0;
y = 0;
}
/* Второй конструктор - с двумя параметрами, он поможет создавать точку
с нужными координатами, сразу указывая их при создании объекта.
*/
Point(double x, double y) {
/* Имена параметров, перекрывающие имена полей, выбраны специально, чтобы показать, что даже неудачный подбор имён не создаёт неразрешимой проблемы. В Java имеется специальное слово this, которое заменяет имя того объекта,
для которого был вызван выполняемый метод или того объекта, который
только создаётся конструктором. Соответственно, this.x - это абсцисса
(первое поле) создаваемого объекта.
*/
this.x = x;
this.y = y;
}
// Метод выводящий точку на экран в формате: (x;y)
void printPoint() {
System.out.print("("+x+";"+y+")");
}
// Метод перемещающий точку в указанное положение
void setPoint(double a, double b) {
x = a;
y = b;
}
void setPoint(double a) { //перегрузка предыдущего метода, перемещение точки
x = a; // на биссектрису I и III координатных четвертей
y = a;
}
// Метод для задания новых координат точки с клавиатуры
void inputPoint() {
Scanner inp = new Scanner(System.in);
System.out.print("Введите абсциссу: ");
double a = inp.nextDouble();
System.out.print("Введите ординату: ");
double b = inp.nextDouble();
setPoint(a,b);
}
/* Метод проверяющий, совпадают ли две точки. Метод работает
с двумя точками, но свойства той, для которой метод вызывается,
доступны непосредственно, а свойства второй точки, передаваемой
через аргумент — доступны как имя_объекта.имя_свойства
*/
boolean isSame(Point a) {
if(x == a.x && y == a.y) {
return true;
} else {
return false;
}
}
// Метод вычисляющий расстояние между двумя точками
double getDistance(Point a) {
return Math.sqrt(Math.pow(x-a.x, 2) + Math.pow(y-a.y, 2));
}
// Метод вычисляющий расстояние от указанной точки до начала координат
double getRadius() {
Point a = new Point(0,0);
return this.getDistance(a);
}
} // конец класс Point
class Point3D extends Point{double z; // создаем класс объектов «трехмерная точка»
//- наследник класса «точка»
Point3D(double x, double y, double z){ // первый конструктор
super(x,y); //класс Point – суперкласс для класса Point3D,
this.z=z; // из него наследуются 2 поля, третье - создается
}
Point3D(){ //второй конструктор)
this(-1,-1,-1);
}
double getDistance(double x, double y, double z){ // перегруженный метод
//определения расстояния между точками
double dx=this.x-x;
double dy=this.y-y;
double dz=this.z-z;
return Math.sqrt(dx*dx+dy*dy+dz*dz);
}
double getDistance(Point3D other){ // перегруженный метод
return getDistance(other.x, other.y, other.z); //определения расстояния между точками
}
} //конец класса Point3D
public class Main { //класс, содержащий метод main
public static void main(String[] args) {
Point a = new Point(); //создаем объект класса Point
System.out.println("Задайте координаты первой точки на плоскости: ");
// Применяем к объекту метод для ввода координат с клавиатуры:
a.inputPoint();
// Создаём второй объект с помощью конструктора с двумя параметрами
// Параметры мы указали такие, что точка также совпадёт с началом
// отсчёта, как если бы воспользовались конструктором по умолчанию:
Point b = new Point(0,0);
System.out.println("Задайте координаты второй точки на плоскости: ");
// Применяем ко второму объекту метод для ввода координат с клавиатуры:
b.inputPoint();
/* Далее мы проверим, совпадают ли точки и, если нет, то вычислим
расстояние между ними и выведем его на экран. Сравнение точек мы
производим с помощью метода, сравнение a==b всегда даст ложный
результат, поскольку a и b хранят ссылки (адреса) объектов, а даже
два объекта с одинаковыми значениями всех полей имеют разные
адреса в памяти.
*/
Point c = new Point(2,3);
if(a.isSame(b)) {
System.out.println("Точки совпадают!");
} else {
System.out.println("Расстояние между точками: "+b.getDistance(a));
}
/* Далее мы проверим какая из точек расположена ближе к началу
координат. И сообщим об этом пользователю.
*/
if(a.getRadius() < b.getRadius()) {
System.out.println("К началу координат ближе первая точка!");
} else if(a.getRadius() == b.getRadius()) {
System.out.println("Точки равноудалены от начала координат!");
} else {
System.out.println("К началу координат ближе вторая точка!");
}
Point3D p=new Point3D(10,20,30); //создаем объект p класса Point3D
System.out.println("x="+p.x+"y="+p.y+"z="+p.z); // Выводим на экран координаты p
Point3D p1=new Point3D(30,40,10); //создаем две трехмерных точки p1 и p2
Point3D p2=new Point3D(0,0,0);
Point p3=new Point(4,6); // создаем двумерную точку p3
System.out.println("p1="+p1.x+","+p1.y+","+p1.z); //вывод координаты на экран
System.out.println("p2="+p2.x+","+p2.y+","+p2.z);
System.out.println("p1.getDistance(p2)="+p1.getDistance(p2)); // вычисление и //вывод на экран расстояния между точками p1 и p2
System.out.println("p1.getDistance(4,6)="+p1.getDistance(4,6)); //вычисление и
//вывод на экран расстояния между точкой p1 и двумерной точкой с координатами // (4,6)
System.out.println("p1.getDistance(p3)="+p1.getDistance(p3)); ////вычисление и
// вывод на экран расстояния между точкой p1 и точкой p3
} //конец метода main
} //конец класса Main
Дата добавления: 2015-11-04; просмотров: 18 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
class WrongState extends Exception{} | | | sovpod,kasanie,peresek,vnutri,poglotil,notach; |