Alguem me pode ajudar?

2 respostas
S

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;
    }

}
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();
		}	
	}	
}

2 Respostas

J

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:

FieroddPJ

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!!!

Criado 26 de novembro de 2006
Ultima resposta 26 de nov. de 2006
Respostas 2
Participantes 3