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.
Bom dia!
Muito obrigado a todos!
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());