Contrutores

preciso de ajuda para um trabalho da escola! o programa ta praticamente feito mas tá a dar um erro que nao entendo e mao sei como resolver! por favor alguem me ajuda??

o erro que me dá é nos construtores!
preciso de ajuda urgente!!
por favor!

import java.util.*;

public class Cliente {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

	String linha;
	
	
	while (sc.next()!= "-1"){
		linha = sc.next();
		
		String [] temp = null;
		temp = linha.split(" ");
		int [] arraypontos = new int [temp.length];
		
		for(int i=0; i<arraypontos.length; i++){
			arraypontos[i]=Integer.parseInt(temp[i]);
		}
		
		if (arraypontos.length == 6){ //e um triangulo
			Triangulo pontostri = new Triangulo();
			for(int i=1; i<arraypontos.length; i++){
				Point p = new Point(arraypontos[--i], arraypontos[i]);
				pontostri.add(p);
			}	
			pontostri.avalia();
		}
		else if (arraypontos.length == 8){  //e um rectangulo
			Rectangulo pontosrect = new Rectangulo();
			for(int i=1; i<arraypontos.length; i++){
				Point p = new Point(arraypontos[--i], arraypontos[i]);
				pontosrect.add(p);
			}	
			pontosrect.avalia();
		}
		else
			System.exit(0);
	}
}

class Figura {
protected List vertices;

protected Figura(List<Point> n) {vertices =n;}

public Figura() {
	vertices = new ArrayList<Point>(); // implementing composition
}

protected void add(Point j) {
	vertices.add(j);
}




public final double perimetro (){
	double perim = 0;
	for (int i=1; i<vertices.size(); i++){
		perim = perim + (vertices.get(i--).dist(vertices.get(i)));
	}
	perim = perim + (vertices.get(0).dist(vertices.get(vertices.size()-1)));
	return perim;
}

public final Point centroide(){
	Point P = new Point(0,0);
	
	if (vertices.size()== 3){
		Segmrecta segm = new Segmrecta(vertices.get(1),vertices.get(2));
		Point medio = segm.pontoMedio();
		Recta A = new Recta(vertices.get(0),medio);
		
		Segmrecta segm2 = new Segmrecta(vertices.get(0),vertices.get(1));
		Point medio2 = segm2.pontoMedio();
		Recta B = new Recta(vertices.get(2),medio2);
		
		//ponto de interseccao entre as duas rectas
		P = A.interseccao(B);
	}
	else if (vertices.size() == 4){
		Recta A = new Recta(vertices.get(0),vertices.get(2));
		Recta B = new Recta(vertices.get(1),vertices.get(3));
		
		P = A.interseccao(B);
	}
	return P;
}

};

class Triangulo extends Figura {

//mandar ele ir buscar os pontos a super classe
public Triangulo(List<Point> s){ super(s); }


protected void avalia (){
	double ab = vertices.get(0).dist(vertices.get(1));
	double bc = vertices.get(1).dist(vertices.get(2));
	double ca = vertices.get(2).dist(vertices.get(0));
	
	if ((ca < ab+bc) && (bc < ca+ab) && (ab < ca+bc)){
		System.out.println(perimetro() + " " + centroide());
	}
	else
		System.out.println("nwwalf");
}

};

na classe cliente quando faço Triangulo pontostri = new Triangulo();
dá o erro The constructor Triangulo() is undefined como posso resolver este erro???

edita isso e coloca seu código dentro das tags pelo amor de Deus.

[code]


 seu codigo

[//code] com uma barra só
import java.util.*;

public class Cliente {
	public static void main(String[] args) { 
		Scanner sc = new Scanner(System.in);
		
		String linha;
		
		
		while (sc.next()!= "-1"){
			linha = sc.next();
			
			String [] temp = null;
			temp = linha.split(" ");
			int [] arraypontos = new int [temp.length];
			
			for(int i=0; i<arraypontos.length; i++){
				arraypontos[i]=Integer.parseInt(temp[i]);
			}
			
			if (arraypontos.length == 6){ //e um triangulo
				Triangulo pontostri = new Triangulo();
				for(int i=1; i<arraypontos.length; i++){
					Point p = new Point(arraypontos[--i], arraypontos[i]);
					pontostri.add(p);
				}	
				pontostri.avalia();
			}
			else if (arraypontos.length == 8){  //e um rectangulo
				Rectangulo pontosrect = new Rectangulo();
				for(int i=1; i<arraypontos.length; i++){
					Point p = new Point(arraypontos[--i], arraypontos[i]);
					pontosrect.add(p);
				}	
				pontosrect.avalia();
			}
			else
				System.exit(0);
		}
	}
};


class Figura {
	protected List<Point> vertices;
	
	protected Figura(List<Point> n) {vertices =n;}
	
	public Figura() {
		vertices = new ArrayList<Point>(); // implementing composition
	}
	
	protected void add(Point j) {
		vertices.add(j);
	}

	

	
	public final double perimetro (){
		double perim = 0;
		for (int i=1; i<vertices.size(); i++){
			perim = perim + (vertices.get(i--).dist(vertices.get(i)));
		}
		perim = perim + (vertices.get(0).dist(vertices.get(vertices.size()-1)));
		return perim;
	}
	
	public final Point centroide(){
		Point P = new Point(0,0);
		
		if (vertices.size()== 3){
			Segmrecta segm = new Segmrecta(vertices.get(1),vertices.get(2));
			Point medio = segm.pontoMedio();
			Recta A = new Recta(vertices.get(0),medio);
			
			Segmrecta segm2 = new Segmrecta(vertices.get(0),vertices.get(1));
			Point medio2 = segm2.pontoMedio();
			Recta B = new Recta(vertices.get(2),medio2);
			
			//ponto de interseccao entre as duas rectas
			P = A.interseccao(B);
		}
		else if (vertices.size() == 4){
			Recta A = new Recta(vertices.get(0),vertices.get(2));
			Recta B = new Recta(vertices.get(1),vertices.get(3));
			
			P = A.interseccao(B);
		}
		return P;
	}
	
};



class Triangulo extends Figura {
	
	//mandar ele ir buscar os pontos a super classe
	public Triangulo(List<Point> s){ super(s); }
	
	
	protected void avalia (){
		double ab = vertices.get(0).dist(vertices.get(1));
		double bc = vertices.get(1).dist(vertices.get(2));
		double ca = vertices.get(2).dist(vertices.get(0));
		
		if ((ca < ab+bc) && (bc < ca+ab) && (ab < ca+bc)){
			System.out.println(perimetro() + " " + centroide());
		}
		else
			System.out.println("nwwalf");
	}
	
};

Na classe cliente vc instancia um objeto Triangulo:

Repare que vc não passa nenhum argumento para o construtor, portanto, o compilador espera que na classe Triangulo tenha um construtor sem parâmetros! O que não é o caso, já que o construtor que tem la na classe triangulo recebe um List como referência.

E o compilador só cria(implicitamente) um construtor padrão caso não exista nenhum construtor. e como já existe esse que vc fez explicitamente, o compilador não faz nada.

[]`s
Matheus

ok! ja alterei isso! o prg ja corre mas agora no cliente quando chega à linha pontosrect.add§; ele craxa! vou mandar meu codigo alterado

[code]

import java.util.*;

public class Cliente {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

	String linha;
	
	
	while (!("-1".equals(sc.nextLine()))){
		linha = sc.nextLine();
		
		String [] temp = null;
		temp = linha.split(" ");
		int [] arraypontos = new int [temp.length];
		
		for(int i=0; i<arraypontos.length; i++){
			arraypontos[i]=Integer.parseInt(temp[i]);
		}
		
		System.out.print(arraypontos.length);
		if (arraypontos.length == 6){ //e um triangulo
			Triangulo pontostri = new Triangulo();
			for(int i=1; i<arraypontos.length; i++){
				Point p = new Point(arraypontos[--i], arraypontos[i]);
				pontostri.add(p);
			}	
			pontostri.avalia();
		}
		else if (arraypontos.length == 8){  //e um rectangulo
			Rectangulo pontosrect = new Rectangulo();
			for(int i=1; i<arraypontos.length; i++){
				Point p = new Point(arraypontos[--i], arraypontos[i]);
				pontosrect.add(p);
			}	
			pontosrect.avalia();
		}
		else
			System.exit(0);
	}
	System.exit(0);
}

};

import java.util.*;

class Figura {
protected List vertices;

protected Figura(List<Point> n) {vertices =n;}

public Figura() {
	vertices = new ArrayList<Point>(); // implementing composition
}

protected void add(Point j) {
	vertices.add(j);
}




public final double perimetro (){
	double perim = 0;
	for (int i=1; i<vertices.size(); i++){
		perim = perim + (vertices.get(i--).dist(vertices.get(i)));
	}
	perim = perim + (vertices.get(0).dist(vertices.get(vertices.size()-1)));
	return perim;
}

public final Point centroide(){
	Point P = new Point(0,0);
	
	if (vertices.size()== 3){
		Segmrecta segm = new Segmrecta(vertices.get(1),vertices.get(2));
		Point medio = segm.pontoMedio();
		Recta A = new Recta(vertices.get(0),medio);
		
		Segmrecta segm2 = new Segmrecta(vertices.get(0),vertices.get(1));
		Point medio2 = segm2.pontoMedio();
		Recta B = new Recta(vertices.get(2),medio2);
		
		//ponto de interseccao entre as duas rectas
		P = A.interseccao(B);
	}
	else if (vertices.size() == 4){
		Recta A = new Recta(vertices.get(0),vertices.get(2));
		Recta B = new Recta(vertices.get(1),vertices.get(3));
		
		P = A.interseccao(B);
	}
	return P;
}

};

//import java.util.List;

class Triangulo extends Figura {

//mandar ele ir buscar os pontos a super classe
//public Triangulo(List<Point> s){ super(s); }


protected void avalia (){
	double ab = vertices.get(0).dist(vertices.get(1));
	double bc = vertices.get(1).dist(vertices.get(2));
	double ca = vertices.get(2).dist(vertices.get(0));
	
	if ((ca < ab+bc) && (bc < ca+ab) && (ab < ca+bc)){
		System.out.println(perimetro() + " " + centroide());
	}
	else
		System.out.println("nwwalf");
}

};[/code]

Como assim? Ele compila? Ou é erro de runtime?

Manda o erro aí

ta aqui o exemplo que eu testo que é o que o professor deu e tá o que dá no eclipse

3 4 9 4 3 8
0 0 1 1 2 2
2 13 6 17 8 15 4 11
-16Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.ensureCapacity(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at Figura.add(Figura.java:13)
at Cliente.main(Cliente.java:26)

Deve ser algum erro de lógica que está fazendo ele alocar objetos demais.

Dê uma revisada no laço do for e os métodos dentro dele pra ver se tão certos mesmo.

Edit: Descobri. ele nunca sai do laço for por que você está sempre incrementando i com i++ e decremetando com --i. Ele fica sempre oscilando entre 0 e 1 e não sai disso.

:smiley: Bom dia!

:smiley: Muito obrigado a todos!

:smiley: Foram uma óptima ajuda!

agora preciso de arredondar um numero!!

nao sei como fazer!

por exemplo o resultado dá 19.321554 e eu tenho que arredondar para 19

como posso fazer isto??

 Double d=19.321554;
System.out.println(d.intValue());