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]