Jump to content
  • 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

Recommended Posts

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.

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other sites
318nuno

Então como é que eu a inicializo? Se tirar o null fico com erro na variável, pois nao foi inicializada.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.