Estou com um erro ,quando mudo um de posição a posição antiga continua com o numero , não sei como deixo só a nova posição com o numero 3 no caso ao invés de a nova e a antiga ficar com o valor 3.
public void moverCarro(int matrix[][]){
for (int l = 0; l < matrix.length; l++) {
for (int c = 0; c < matrix[l].length; c++) {
int numero = matrix[l][c];
if (numero == 3) {
Random random=new Random();
int direcao = random.nextInt(4);
switch(direcao) {
// move para cima
case 0:
c = c;
l = l - 2;
break;
//move para baixo
case 1:
c=c;
l=l +2;
break;
//move para direita
case 2:
c=c-2;
l=l;
break;
//move para esquerda
case 3:
c=c+2;
l=l;
break;
// as outras direcoes
}
matrix[l][c] = numero;
}
podemos até ignora a condição mais não a função, como vc pensou em adicionar os carros, 1 por vez ou um 8 de carros para mover depois na função “moverCarro”…
Um carro é um objeto pois ele tem marca ele tem modelo… não seria uma matriz de inteiros, e gostaria de saber tbm pq vc decidiu por uma matriz de inteiros?
public void gerarCarro(int matrix[][]) throws Exception {
for (int l = 0; l < matrix.length; l++) {
for (int c = 0; c < matrix[l].length; c++) {
matrix[l][c] = 3;
}
}
}
no função moverCarro para cada caso vc deverá fazer uma verificação pq senão tbm vc receberá um ArrayIndexOutOfBoundsException
public void moverCarro(int matrix[][]) throws Exception {
for (int l = 0; l < matrix.length; l++) {
for (int c = 0; c < matrix[l].length; c++) {
int numero = matrix[l][c];
if (numero == 3) {
Random random = new Random();
int direcao = random.nextInt(4);
matrix[l][c] = 0;
switch (direcao) {
// move para cima
case 0:
if ((l - 2) > 0) {
l = l - 2;
}
break;
//move para baixo
case 1:
if ((l + 2) < matrix[l].length) {
l = l + 2;
}
break;
//move para direita
case 2:
if ((c - 2) > 0) {
c = c - 2;
}
break;
//move para esquerda
case 3:
if ((c + 2) < matrix[c].length) {
c = c + 2;
}
break;
// as outras direcoes
}
matrix[l][c] = numero;
}
}
}
}
public class Carro {
public static void main(String[] args) {
Carro car = new Carro();
int[][] matrix = new int[3][3];
try {
car.gerarCarro(matrix);
car.moverCarro(matrix);
for (int[] matrix1 : matrix) {
for (int c = 0; c < matrix1.length; c++) {
System.out.print(matrix1[c] + " ");
}
System.out.println();
}
} catch (Exception ex) {
Logger.getLogger(Carro.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void gerarCarro(int matrix[][]) throws Exception {
for (int[] matrix1 : matrix) {
for (int c = 0; c < matrix1.length; c++) {
matrix1[c] = 3;
}
}
}
public void moverCarro(int matrix[][]) throws Exception {
Random random = new Random();
for (int l = 0; l < matrix.length; l++) {
for (int c = 0; c < matrix[l].length; c++) {
int numero = matrix[l][c];
if (numero == 3) {
int direcao = random.nextInt(4);
matrix[l][c] = 0;
switch (direcao) {
// move para cima
case 0:
if ((l - 2) > 0) {
l = l - 2;
}
break;
//move para baixo
case 1:
if ((l + 2) < matrix[l].length) {
l = l + 2;
}
break;
//move para direita
case 2:
if ((c - 2) > 0) {
c = c - 2;
}
break;
//move para esquerda
case 3:
if ((c + 2) < matrix[c].length) {
c = + 2;
}
break;
// as outras direcoes
}
matrix[l][c] = numero;
}
}
}
}
}
Caramba que legal, vou testar quando chegar em casa.
No meu programa as bordas terão valor 1 é o resto será 0 , as condições pra quando ele ir pra uma casa que tenha valor 1 ele aparecer no inicio ou fim da mesma linha ou coluna seria no.switch case?
Por exemplo matriz[29][59] ai se o próximo fosse um valor 1 ele voltaria ai seria matriz[1][59] isso para ambos os lados
Esse é o que tenho que fazer , a parte verde são fabricas que irão gerar o veiculo que passar.nela que na minha matriz deixei com o.numero 2 esses.blocos
Reparei no seu código que você usa sempre o 2 para somar ou subtrair, então é só garantir que o carro comece por um número impar e quando chegar em 59 e precisar somar 2, você faz um
Na verdade eu posso deixar chegar mas quando chegar vai voltar pro inicio da linha ou coluna tipo m[29][59] ai se ele andar m[1][59] caso for pela coluna m[29][59] ai ele anda m[29][1]
então no que você falou na chegada a borda já é para mudar e não ele ficar na borda, no exemplo que postei quando ele for chegar na borda ele já vai para a primeira posição se você quiser que ele por exemplo está na posição 58 com velocidade 3 e assim vai para a casa 4, pois a borda 59 não conta e nem a 0, então no else do primeiro você coloca l=l+parametro-57; no else do segundo você coloca l=l-parametro+59;