vamosAeles Escreveu:Boas,
no teu cod acima tens umas cenas q nao parecem bem:
1)coordenadasAleatorias.randomCoordinate(linha, coluna);
Repara que aquilo nao esta a fazer nada. O metodo randomCoordinate(linha, coluna) retorna uma coordenada, mas não estás a guardá-la.
Acho que querias era fazer algo:
coordenadasAleatorias = CoordinateRandomizer.randomCoordinate(linha, coluna);
2) Mais uma vez insisto que parece-me que esse método é suposto recebe a dimensao do array (tabuleiro)
2)O método randomlyDeployBoats que tens em cod acima é todo teu, ou parte já foi dado pelo prof?
3)Qd vais por um barco, tens de verificar nesse metodo se nessa posicao já existe um outro, certo?
(De qq maneira se percebi bem o que se quer com esse metodo randomlyDeployBoats , cuidado com essas condições tipo contador < 3, porque depois quando tiveres que generalizar para n barcode N canos tens de mudar isso tudo e é mais facil teres logo isso em conta no inicio)
Depois qd poes o de 3canos, parece que nao estás a fazer correctamente.
Nao percebo pq fazes linha = random.nextInt(10 + 1); (Assim estas a gerar um numero random no randomCoordinate que vai de 0 a um numero random q acabas-te de gerar em "linha = random.nextInt(10 + 1)")**
Acho q devias logo fazer randomCoordinate(board.lenght, board[0].lenght), assim como verificar se estas a 'esmagar' o barco de 4 canos antes de comecar a fazer cenas tipo board[x + 1][y] = barco3Canos;
** isto pode gerar a excepcao q estava no teu post acima, imagina que linha = random.nextInt(10 + 1); fica com 0. Depois qd invocas randomCoordinate(linha (com valor 0), coluna), a instrução int line = randomizer.nextInt(numberOfLines) vai mandar essa exepcao, porque o parametro do nextInt tem de ser positivo, senao não consegue gerar nenhum número entre 0(inclusive) e parametro (exclusive)
Cumps
desde ja agradeço o esclarecimento como sempre é bem vindo e igualmente util ^^, das-lhe bues, vais tipo a "fonte" do problema ve-se mesmo que percebes os porquês de fazer isto ou aquilo, isso é coisas que me faltam bastante...
respondendo-te agora:
1) Eu fiz isso agora, mudando so o tipo da varivel coordenadasAleatorias para:
Coordinate coordenadasAleatorias = new Coordinate(linha, coluna);
pois a class Coordinate é onde estao os metodos construtores e respectivos inspectores e se fizesse como me disseste tal e qual davame um erro. Fiz asneira?
2)o codigo nao é todo meu, grande parte dele ja foi pre-feito pelo meu prof, alias eu nem tinha que cirar os barcos o que eu tenho mesmo que fazer nesse metodo public void randomlyDeployBoats(final int[] numberOfBoatsPerSize) é gerar aleatoriamente coordenadas para os barcos; gerar aleatoriamente a posiçao dos barcos, vertical ou horizontal;
se nao for possivel, gerar proxima direcçao. senao gerar coordenada seguinte.
se mesmo assim nao der, mandar uma msg de erro a avisar.
senao, posicionar o barco lol.
a unica razao pela qual fiz os barcos era pra mais ou menos me orientar no outPut a ver se estava a fazer asneira ou nao =\
codigo normal :
- Código: Seleccionar todos
public class Board
{
private final char[][] board;
public Board(final char[][] board)
{
this.board = board;
}
public void randomlyDeployBoats(final int[] numberOfBoatsPerSize)
{
}
}
codigo actual meu:
- Código: Seleccionar todos
public class Board
{
private final char[][] board;
public Board(final char[][] board)
{
this.board = board;
}
public int linha = 1;
public int coluna = 1;
Coordinate coordenadasAleatorias = new Coordinate(linha, coluna);
public int contador = 0;
public char barco4Canos = '4';
public void completarBarco4Canos()
{
for(int x = 0; x < board.length - 1; x++)
{
for(int y = 0; y < board[x].length - 1; y++)
{
if(board[x][y] == barco4Canos && contador < 3)
{
board[x + 1][y] = barco4Canos;
contador++;
}
}
}
}
public void randomlyDeployBoats(final int[] numberOfBoatsPerSize)
{
coordenadasAleatorias = CoordinateRandomizer.randomCoordinate(linha, coluna);
board[linha][coluna] = barco4Canos;
completarBarco4Canos();
}
}
Nota: se inicializar as variaveis linha, coluna a zero. o programa gera aquele tal erro de excepçao. mas se eu inicializar as variaveis a 1 obetenho os outputs todos de testes exemplo de um:
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ 4 ~ ~ ~ ~ ~ ~ ~ ~
~ 4 ~ ~ ~ ~ ~ ~ ~ ~
~ 4 ~ ~ ~ ~ ~ ~ ~ ~
~ 4 ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ 5 ~
~ ~ ~ ~ ~ ~ 5 5 5 ~
~ ~ ~ ~ ~ ~ ~ ~ 5 ~
mas nos 10 ooutpus a posiçao do meu barco de 4Canos nunca muda ou seja, nao estou a conseguir gerar aleatoriamente as variaveis com os metodos ja criados na class do meu prof. porque?
eu pensei em gerar eu mesmo o numero aleatorio dai o "linha = random.nextInt(10 + 1)" a minha intençao aqui era gerar um numero de 1 a 10 de alguma maneira lol.. so que la esta. nao tem logica nenhuma isto, se ja tenho metodos que me gerem numeros aleatorios e eu estou a usalos. (penso eu que correctamente) porque é que a coordenada nao muda nos outputs?=\
3)como ja referi, eu nao preciso de fazer barcos, mas a suposta pessoa que os vai meter, este metodo tem de ser capaz de se a posiçao ja esta ocupada ou seja neste caso tenho que fazer qualquer coisa como != '~'; certo?
obrigado mais uma vez.
cumps