JAVA POO - Substituir valor de uma posição matriz

Opa pessoal ,

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.

Segue abaixo meu codigo para mover:

import java.util.Random;
import java.util.ArrayList;

public class Carro{

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

}
}

	}

}

qual a real necessidade dessa condição?

se a matriz passada por parâmetro for menor que o resultado de “a” e “b” vc vai ter um ArrayIndexOutOfBoundsException

1 curtida

Ignora essa condição , copiei um metodo errado.

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?

Os carros não irão ter marcas nem modelo ,serão numeros 3 que irei adicionar na matriz

haaa sim então a função gerarCarro ficaria assim:

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

Ah , vlw.

Sabe o que posso fazer pra quando mover o carro a posição antiga ficar com o numero 0 ?

antes de entrar no switch:

matrix[l][c] = 0;

1 curtida

Nossa , Obrigado haha era isso mesmo

Me ajudou muito

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

Quando executo está dando esse erro:

Main.java:95: error: unreported exception Exception; must be caught or declared to be thrown
carros.moverCarro(matrix);
^
1 error

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

if((l+2)<60){
l+=2;
}
else{
l=1;
}

no outro so fazer o inverso:

if((l-2)>0){
l-=2;
}
else{
l=59;
}

É que é a velocidade do carro no programa , mas mudei isso pra passar como parâmetro na que vai ter carros,motos e caminhões.

Como a posição 0 e 59 pelo jeito é de borda, você não pode deixar chegar nelas então é só fazer parecido com abaixo:

if((l+parametro)<59){
l+=parametro;
}
else{
l=1;
}

no outro so fazer o inverso:

if((l-parametro)>1){
l-=parametro;
}
else{
l=58;
}

assim você garante que ele estará sempre dentro do 1 até o 58.

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;