Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

318nuno

Problema com array do tipo Point2D.Double

Mensagens Recomendadas

318nuno

Boas,

Durante a elaboração de um programa em java, que tem por objectivo desenhar uma parabola, deparei-me com um problema no qual nao consigo resolver.

public Point2D.Double[] plotParabola(int x1, int x2){
	Point2D.Double[] points = null;
	int arrayCounter;
	arrayCounter = 0;
	for (int i = x1; i<=x2; i++){
		points[arrayCounter] = new Point2D.Double(i, value(i));
		arrayCounter++;
	}
	return points;
}

a função plotParabola serve para, dado um intervalo (x1,x2), coloca num array todos os pontos (x,y) desse intervalo, usando o Point2D. Este array vai servir para colocar os pontos na janela e depois uni-los com o Line2D. No entanto dá-me um erro do tipo "Null pointer exception" e não estou mesmo a ver do que seja. Se me pudessem ajudar ficava bastante grato.

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Ora, NullPointerException, naturalmente é um excepção lançada porque estás a aceder a uma referência que está iniciada a null. A própria mensagem de erro diz em que linha e em que coluna estás a tentar fazer isso.

Mas indo directo ao problema:

Point2D.Double[] points = null;

Se estás a dizer que points é null, como é que queres colocar coisas lá dentro sem levantar um NullPointerException :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Fica um warning, não um erro.

Podes iniciar a variável com algo na onde de:

points = new Point2D.Double[x2 - x1];

O que é importante é que tens de iniciar um array para os dados que queres guardar e definir o seu tamanho.

Atenção que nesse código não estás a confirmar se o x1 é menor que o x2 e isso pode causar alguns erros.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
318nuno

não fica warning fica mesmo erro. O proprio eclipse sugere que se inicie o array como null. No enunciado o x1 é menor que o x2, não há problema com isso.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
falk0n


import java.awt.geom.Point2D;


public class test {

 public Point2D.Double[] plotParabola(int x1, int x2){
         Point2D.Double[] points = new Point2D.Double[x2-x1];
         int arrayCounter;
         arrayCounter = 0;
         for (int i = x1; i<=x2; i++){
                 points[arrayCounter] = new Point2D.Double(i, value(i));
                 arrayCounter++;
         }
         return points;
}

}

Fiz esta classe test só para experimentar a ver no que ele dava erro, ele está a assinalar que existe um erro mas no método value, uma vez que não tenho disponível esse método por isso o que te tinha sido dito anteriormente parece correcto.

Mas olhando para o código com um pouco mais de atenção verifico que tens um sinal de menor ou igual na parte de teste do for, por isso se fizeres x2-x1 (imaginando que x2 = 4 e x1=2) o array irá ter 2 posições, mas no teste tens que irá executar quando i=2 , i=3, i=4 ou seja faz três vezes em vez de apenas duas (como foi declarado no array de duas posições.

Verifica se não é esta situação o que te está a ocorrer ...

Boas programações,

Nuno Martins

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
318nuno

falk0n obrigado pela ajuda. Sim esse igual era o pequeno erro que não tinha visto. O problema já está resolvido.

Obrigado pela ajuda novamente.

Cumps.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.