Вот снова такой пример кода, есть ошибка. Изучаю Java. Прошу помочь тех, кто разбирается.
Ссылка где можно посмотреть листинг кода 6.7.
ссылка на книгу
Список ошибок:
Test.java:18: warning: [unchecked] unchecked method invocation: constructor <init> in class TreeSet is applied to given types
TreeSet<Complex> ts = new TreeSet<>(new ComplexCompare());
^
required: Comparator<? super E>
found: ComplexCompare
where E is a type-variable:
E extends Object declared in class TreeSet
Test.java:18: warning: [unchecked] unchecked conversion
TreeSet<Complex> ts = new TreeSet<>(new ComplexCompare());
^
required: Comparator<? super E>
found: ComplexCompare
where E is a type-variable:
E extends Object declared in class TreeSet
Test.java:18: warning: [unchecked] unchecked conversion
TreeSet<Complex> ts = new TreeSet<>(new ComplexCompare());
^
required: TreeSet<Complex>
found: TreeSet
3 warnings
Test.javaimport java.util.*;
class ComplexCompare implements Comparator {
public int compare(Object obj1, Object obj2) {
Complex z1 = (Complex) obj1, z2 = (Complex) obj2;
double re1 = z1.getRe(), im1 = z1.getIm();
double re2 = z2.getRe(), im2 = z2.getIm();
if (re1 != re2) return (int)(re1 - re2);
else if (im1 != im2) return (int)(im1 - im2);
else return 0;
}
public boolean equals(Object z) {
return compare(this, z) == 0;
}
}
class Test {
public static void main(String[] args) {
TreeSet<Complex> ts = new TreeSet<>(new ComplexCompare());
ts.add(new Complex(1.2, 3.4));
ts.add(new Complex(-1.25, 33.4));
ts.add(new Complex(1.23, -3.45));
ts.add(new Complex(16.2, 23.4));
Iterator it = ts.iterator();
while (it.hasNext()) {
((Complex) it.next()).pr();
};
}
}
Complex.javaclass Complex {
private static final double EPS = 1e-12; // Точность вычислений
private double re, im; // Действительная и мнимая часть
// Четыре конструктора
Complex(double re, double im) {
this.re = re;
this.im = im;
}
Complex(double re) {
this(re, 0.0);
}
Complex() {
this(0.0, 0.0);
}
Complex(Complex z) {
this(z.re, z.im);
}
// Методы доступа
public double getRe() {
return re;
}
public double getIm() {
return im;
}
public Complex getZ() {
return new Complex(re, im);
}
public void setRe(double re) {
this.re = re;
}
public void setIm(double im) {
this.im = im;
}
public void setZ(Complex z) {
re = z.re;
im = z.im;
}
// Модуль и аргумент комплексного числа
public double mod() {
return Math.sqrt(re * re + im * im);
}
public double arg() {
return Math.atan2(re, im);
}
// Проверка: действительное число?
public Boolean isReal() {
return Math.abs(im) < EPS;
}
public void pr() { // Вывод на экран
System.out.println(re + (im < 0.0 ? "" : "+") + im + "i");
}
// Переопределение методов класса Object
public Boolean equals(Complex z) {
return Math.abs(re - z.re) < EPS && Math.abs(im - z.im) < EPS;
}
public String toString() {
return "Complex: " + re + "" + im;
}
// Методы, реализующие операции +=, -=, *=, /=
public void add(Complex z) {
re += z.re;
im += z.im;
}
public void sub(Complex z) {
re -= z.re;
im -= z.im;
}
public void mul(Complex z) {
double t = re * z.re - im * z.im;
im = re * z.im + im * z.re;
re = t;
}
public void div(Complex z) {
double m = z.mod();
double t = re * z.re - im * z.im;
im = (im * z.re - re * z.im) / m;
re = t / m;
}
// Методы, реализующие операции +, -, *, /
public Complex plus(Complex z) {
return new Complex(re + z.re, im + z.im);
}
public Complex minus(Complex z) {
return new Complex(re - z.re, im - z.im);
}
public Complex asterisk(Complex z) {
return new Complex(
re * z.re - im * z.im, re * z.im + im * z.re);
}
public Complex slash(Complex z) {
double m = z.mod();
return new Complex((re * z.re - im * z.im) / m, (im * z.re - re * z.im) / m);
}
}