Alguem me pode ajudar?

BOAS PESSOAL!
Eu tou com um problema quando tento correr um programa que estou a fazer, e nao sei porke ele da-me um erro de Nullpoiterexception e eu nao consigo resolver essse erro se alguem me poder dar uma ajuda, agradecia!

Eu uso o eclipse para fazer estes programas!

Coordenada.java

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class Coordenada {

	private int linha;
	private int coluna;

    public Coordenada(final int nova_linha, final int nova_coluna) {
    	this.linha = nova_linha;
    	this.coluna = nova_coluna;
    }

    public Coordenada(final Coordenada c) {
    	this.linha=c.linha;
    	this.coluna=c.coluna;
    }

    public Coordenada(String s) {
    	assert s!=null;
    	char e = s.charAt(0);
    	int i = e;
    	linha = i - 64;
    	String aux = s.substring(1,s.length());
    	coluna= Integer.valueOf(aux);
    	
    }

    public String toString() {
    	return (linha + ", " + coluna);
    }
    
    public boolean éIgualA(Coordenada c) {
    	return c.linha==linha && c.coluna==coluna; 
    }
    
    public boolean entre(final Coordenada c_inicial, final Coordenada c_final) {
    	return linha>=c_inicial.linha && coluna>=c_inicial.coluna && linha<=c_final.linha && coluna<=c_final.coluna;
    }

    public int getLinha() {
    	return linha;
    }

    public int getColuna() {
    	return coluna;
    }

}

[code]
Problema3.java

public class Problema3 {

private static final char VAZIO = '.';
private char[][] tabuleiro = {
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO},
		{VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO,VAZIO}
};

/**
 * Construtor da classe Problema3 
 * 
 * @pre
 * 
 */
public Problema3() {
	
}

/**
 * Verifica no tabuleiro da classe se a posição indicada 
 * pela 	Coordenada passada como argumento, é válida. 
 * Uma coordenada é considerada válida, se:
 * 1. A posição que define está dentro do tabuleiro,
 * 2. A posição correspondente no tabuleiro está livre 
 * (consideram-se livres todas as posições que contêm o caractere VAZIO), e
 * 3. Todas as 8 posições do tabuleiro à volta desta coordenada estão 
 * livres (ou não existem no tabuleiro). 
 * 
 * @pre
 * 
 */

public boolean posicaoValida(final Coordenada posicao) {
	int i = posicao.getLinha();
	int j =posicao.getColuna();
	
	return i < 0  && j < 0 
		&& i >= tabuleiro.length 
		&& j >= tabuleiro[i].length
		&& j+1 >= tabuleiro.length
		&& i+1 >= tabuleiro.length
		&& tabuleiro[i][j] == VAZIO
		&& tabuleiro[i+1][j+1] == VAZIO 
		&& tabuleiro[i+1][j] == VAZIO 
		&& tabuleiro[i+1][j-1] == VAZIO
		&& tabuleiro[i-1][j-1] == VAZIO 
		&& tabuleiro[i-1][j] == VAZIO 
		&& tabuleiro[i-1][j+1] == VAZIO
		&& tabuleiro[i][j-1] == VAZIO 
		&& tabuleiro[i][j]== VAZIO 
		&& tabuleiro[i][j+1] == VAZIO;
			
}

/**
 * Procede à colocação de uma frota dada por uma matriz bi-dimensional de coordenadas
 * em que, cada linha corresponde a um barco diferente
 * Deve devolver falso caso não seja possível colocar a frota e verdadeiro
 * caso contrário. 
 * 
 * @pre
 * 
 */
public boolean colocaFrota(final Coordenada[][] frota) {		

	char barco = ' ';
	boolean f = true;
	for (int i=0; i!=frota.length; ++i){
		Coordenada [] aux = new Coordenada[frota[i].length];
		int indice = 0;
		for (int j=0; j!=frota[i].length; ++j){
	
			if(posicaoValida(frota[i][j])){
				aux[indice]=frota[i][j];
				++indice;
				f = true;
			} else {
				f = false;
			}
		}
		barco = (char)(frota[i].length + 48);
		colocaBarco(aux,barco);
	}
	return f;

}

/**
 * Preenche o tabuleiro, nas coordenadas indicadas com o caractere
 * que é dado no segundo argumento
 * 
 * @pre
 * 
 */
public void colocaBarco(final Coordenada[] c, char barco) {
		int l =0;
		System.out.println("antes do while");
		while(l!=tabuleiro.length){
		tabuleiro[c[l].getLinha()][c[l].getColuna()]=barco;
		++l;
		}
	
}

/**
 * Preenche o tabuleiro, com o caracter VAZIO
 * 
 * @pre
 * 
 */
public void limpaTabuleiro() {
	assert tabuleiro != null;
	for (int i = 0; i != tabuleiro.length; ++i)
		for (int j = 0; j != tabuleiro[i].length; ++j)
			tabuleiro[i][j] = VAZIO;
}

/**
 * Mostra o tabuleiro no ecrã
 * 
 * @pre
 * 
 */
public void mostraTabuleiro() {
	for (int i = 0; i != tabuleiro.length; ++i){
		for (int j = 0; j != tabuleiro[i].length; ++j){
			System.out.print(" " + tabuleiro[i][j]);
		}
		System.out.println();
	}						
}
	
public static void main(String[] args) {
	Coordenada[][] frota_certa = {
			{new Coordenada(1, 1), new Coordenada(1, 2), new Coordenada(1, 3), new Coordenada(2, 2), new Coordenada(3, 2)},
			{new Coordenada(1, 9), new Coordenada(2, 9), new Coordenada(3, 9), new Coordenada(4, 9)},
			{new Coordenada(9, 1), new Coordenada(9, 2), new Coordenada(9, 3)},
			{new Coordenada(9, 9), new Coordenada(9, 8), new Coordenada(9, 7)},
			{new Coordenada(5, 5), new Coordenada(5, 6)},
			{new Coordenada(7, 7), new Coordenada(7, 8)},
			{new Coordenada(3, 4), new Coordenada(3, 5)},
			{new Coordenada(5, 1)},
			{new Coordenada(1, 5)},
			{new Coordenada(7, 3)},
			{new Coordenada(3, 7)},
	};
	
	Coordenada[][] frota_errada = {
			{new Coordenada(1, 1), new Coordenada(1, 2), new Coordenada(1, 3), new Coordenada(2, 2), new Coordenada(3, 2)},
			{new Coordenada(1, 9), new Coordenada(2, 9), new Coordenada(3, 9), new Coordenada(4, 9)},
			{new Coordenada(9, 1), new Coordenada(9, 2), new Coordenada(9, 3)},
			{new Coordenada(9, 9), new Coordenada(9, 8), new Coordenada(9, 7)},
			{new Coordenada(5, 5), new Coordenada(5, 6)},
			{new Coordenada(7, 7), new Coordenada(7, 8)},
			{new Coordenada(3, 3), new Coordenada(3, 4)},
			{new Coordenada(5, 1)},
			{new Coordenada(1, 5)},
			{new Coordenada(7, 3)},
			{new Coordenada(3, 7)},
	};
	
	Problema3 p3 = new Problema3();
	
	Coordenada[][][] frotas = {frota_certa, frota_errada};
	
	for (int i = 0; i != frotas.length; ++i) {
		p3.limpaTabuleiro();
		if (p3.colocaFrota(frotas[i])) {
			System.out.println("Frota válida");											
		} else {
			System.out.println("Frota inválida");
		}
		p3.mostraTabuleiro();
	}	
}	

}[/code]

Cara, o seu código é um pouco grandinho, mas vc pode ver o seguinte.
Normalmente NullPointerException é um erro do seu código, onde vc tenta modificar uma propriedade de um objeto que atualmente é null.
Dá uma olhada se vc não está tentando alterar um objeto antes de criá-lo.
:wink:

Se vc estiver utilizando uma IDE, faça um debug, vc pode percorrer seu codigo linha a linha e ver aonde acontece a exceção, fica bem mais facil pra encontrar!!!