Так что я выполняю задание для школы в java ... Это иерархическая иерархия классов, и мы предполагаем, чтобы создать класс «Triangle.java», который расширяет класс «ClosedShape.java», который расширяет «Shape.java» ... ClosedShape и Shape даются нам, поэтому, скорее всего, с ними ничего плохого (i ' выложим их в любом случае), но мой класс Triangle выглядит следующим образом:Конструктор ... не применим (фактические и формальные списки аргументов различаются по длине) - но он соответствует
public abstract class Triangle extends ClosedShape{
public Triangle(int[] a, int[] b, int base, int height){
super(true, 3, a, b);
setWidth(base);
setHeight(height);
setXYCoords(a, b);
}
public Triangle(int x, int y, int base, int height){
int[] a = new int[3];
int[] b = new int[3];
a[0] = x;
a[1] = (x+base)/2;
a[2] = (x+base);
b[0] = y;
b[1] = (y+height)/2;
b[2] = (y+height);
}
}
причина у меня есть два конструктора, потому что мне нужно, чтобы создать эти два массив для хранения точек для рисования формы ... и тогда мне нужно чтобы они перешли в класс ClosedShape (boolean, int, int [], int []) super class ... if i создайте массивы в том же конструкторе, которые им нужно будет определить перед вызовом super(), чтобы они могли быть переданы, но это не разрешено, потому что вызов super() должен быть первым ... так что в настоящее время, когда я пытаюсь компилировать Triangle.java я получаю сообщение об ошибке:
Triangle.java.14: error: no suitable constructor found for ClosedShape()
{ //little arrow pointing under the '{'
constructor ClosedShape.ClosedShape(boolean, int, int[], int[]) is not applicable
(actual and formal argument lists differ in length)
constructor ClosedShape.ClosedShape(boolean, int) is not applicable
(actual and formal argument lists differ in length)
1 error
Он также указывает, в задании, что подпись для треугольника должен быть Traingle (целое х, у ИНТ, внутр база, внутр высота) ... Итак ... я запутался, потому что, если я не ошибаюсь (что я думаю, что я ...), я сделал супер-вызов со всеми правильными значениями, а там - это конструктор «ClosedShape (boolean, int , int [], int []) "... имеет класс ClosedShape:
import java.awt.Graphics;
public abstract class ClosedShape extends Shape {
boolean polygon;
int numPoints;
int[] xVertices;
int[] yVertices;
int x,y,width, height;
public ClosedShape(boolean isPolygon, int numPoints) {
super(0,0);
this.polygon = isPolygon;
this.numPoints = numPoints;
}
public ClosedShape(boolean isPolygon, int numPoints, int[] x, int[] y) {
super(x[0],y[0]);
this.polygon = isPolygon;
if (isPolygon) {
this.numPoints = numPoints;
xVertices = new int[numPoints]; // error check? if x.length == numPoints
//for (int i = 0; i < x.length; i++) { // make copy of array: why?
// xVertices[i] = x[i];
//}
yVertices = new int[numPoints]; // error check? if y.length == numPoints
for (int i = 0; i < y.length; i++) { // make copy of array
yVertices[i] = y[i];
}
}
else { // its an oval - define bounding box
this.numPoints = 4;
this.x = x[0];
this.y = y[0];
width = x[1];
height = y[1];
}
}
public void setXYCoords(int[] x, int[] y){
this.xVertices = x;
this.yVertices = y;
}
// Gives access to the width attribute
public void setWidth(int width){
this.width = width;
}
// Gives access to the height attribute
public void setHeight(int height) {
this.height = height;
}
public void draw(Graphics g) {
if (polygon) {
g.drawPolygon(xVertices, yVertices, numPoints);
}
else {
g.drawOval(x, y, width, height);
}
}
public abstract double Area();
public abstract double Perimeter();
}
Мой совет? Верьте компилятору. Ваш код неправильный. – duffymo
Изменение второго конструктора в public void Triangle (...) делает его больше не константатором. Теперь он становится обычным методом в треугольнике. Таким образом, он теперь компилируется, потому что вы изменили свой конструктор проблем, чтобы не быть конструктором. – Marshmellow1328
Это сумасшедший совет. Если вам нужен конструктор, напишите его правильно. – duffymo