Exception in Thread, o que aconteceu?

class Triangle
{
    double area;
    int height;
    int length;

public static void main(String [] args)
{
	int x = 0;
	Triangle [] ta = new Triangle[4];
	
	while(x < 4)
	{
		
		ta[x].height = (x + 1) * 2;
		ta[x].length = x + 4;
		ta[x].setArea();
		System.out.print("triangle "+x+", area");
		System.out.println(" = " + ta[x].area);
		x = x + 1;
	}
	
	int y = x;		
	x = 27;

	Triangle t5 = ta[2];
	ta[2].area = 343;
	System.out.print("y = " + y);
	System.out.println(", t5 area = " + t5.area);
}

void setArea()
{
 	area = (height * length) /2;
}
}

A saída está dando:

identar texto pre-formatado em 4 espaçosException in Thread “main” java.lang.NullPointerException at Triangle.main(Triangle.java:15)

tem que ver essa linha Triangle.java:15.
poe um break point, e executa em debug.

Olá

Faltou instanciar o objeto

Adicione ta[x] = new Triangle();

while(x < 4)
{
    ta[x] = new Triangle();
    ta[x].height = (x + 1) * 2;
1 curtida

O que você está fazendo nessa linha: ta[x].length = x + 4; ?
O length é para percorrer, acho que você não deveria atribuir valor usando length;

Mas você poderia me explicar mais detalhadamente por quê?

Eu não consegui entender por que eu tenho que fazer:

Triangle [] ta = new Triangle[4];

E depois tenho que dentro do while fazer:

ta[x] = new Triangle();

Voce faz fora do while Triangle [] ta = new Triangle[4]; para definir quantos objetos serão armazenados no array. Dentro do while serão criados 4 objetos do tipo Triangle.

enquanto x for menor que < 4 faça, ou preencha o vetor com 4 objetos do tipo Triangle()

ta[0] = new Triangle(); //percorreu o while um vez
ta[1] = new Triangle(); //percorreu o while duas vezes 
ta[2] = new Triangle(); ...
ta[3] = new Triangle();

A cada iteração será criado um novo objeto

Aconteceu Exception porque você está criando um array de objetos do tipo Triangle(), e o ta[x] dentro do while está nulo