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.
publicvoidmoverCarro(intmatrix[][]){for(intl=0;l<matrix.length;l++){for(intc=0;c<matrix[l].length;c++){intnumero=matrix[l][c];if(numero==3){Randomrandom=newRandom();intdirecao=random.nextInt(4);switch(direcao){// move para cimacase0:c=c;l=l-2;break;//move para baixocase1:c=c;l=l+2;break;//move para direitacase2:c=c-2;l=l;break;//move para esquerdacase3:c=c+2;l=l;break;// as outras direcoes}matrix[l][c]=numero;}
se a matriz passada por parâmetro for menor que o resultado de “a” e “b” vc vai ter um ArrayIndexOutOfBoundsException
C
Caioww99
Ignora essa condição , copiei um metodo errado.
B
blayd2015
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?
C
Caioww99
Os carros não irão ter marcas nem modelo ,serão numeros 3 que irei adicionar na matriz
Sabe o que posso fazer pra quando mover o carro a posição antiga ficar com o numero 0 ?
B
blayd20151 like
antes de entrar no switch:
matrix[l][c] = 0;
C
Caioww99
Nossa , Obrigado haha era isso mesmo
Me ajudou muito
B
blayd2015
no função moverCarro para cada caso vc deverá fazer uma verificação pq senão tbm vc receberá um ArrayIndexOutOfBoundsException
publicvoidmoverCarro(intmatrix[][])throwsException{for(intl=0;l<matrix.length;l++){for(intc=0;c<matrix[l].length;c++){intnumero=matrix[l][c];if(numero==3){Randomrandom=newRandom();intdirecao=random.nextInt(4);matrix[l][c]=0;switch(direcao){// move para cimacase0:if((l-2)>0){l=l-2;}break;//move para baixocase1:if((l+2)<matrix[l].length){l=l+2;}break;//move para direitacase2:if((c-2)>0){c=c-2;}break;//move para esquerdacase3:if((c+2)<matrix[c].length){c=c+2;}break;// as outras direcoes}matrix[l][c]=numero;}}}}
C
Caioww99
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
B
blayd2015
publicclassCarro{publicstaticvoidmain(String[]args){Carrocar=newCarro();int[][]matrix=newint[3][3];try{car.gerarCarro(matrix);car.moverCarro(matrix);for(int[]matrix1:matrix){for(intc=0;c<matrix1.length;c++){System.out.print(matrix1[c]+" ");}System.out.println();}}catch(Exceptionex){Logger.getLogger(Carro.class.getName()).log(Level.SEVERE,null,ex);}}publicvoidgerarCarro(intmatrix[][])throwsException{for(int[]matrix1:matrix){for(intc=0;c<matrix1.length;c++){matrix1[c]=3;}}}publicvoidmoverCarro(intmatrix[][])throwsException{Randomrandom=newRandom();for(intl=0;l<matrix.length;l++){for(intc=0;c<matrix[l].length;c++){intnumero=matrix[l][c];if(numero==3){intdirecao=random.nextInt(4);matrix[l][c]=0;switch(direcao){// move para cimacase0:if((l-2)>0){l=l-2;}break;//move para baixocase1:if((l+2)<matrix[l].length){l=l+2;}break;//move para direitacase2:if((c-2)>0){c=c-2;}break;//move para esquerdacase3:if((c+2)<matrix[c].length){c=+2;}break;// as outras direcoes}matrix[l][c]=numero;}}}}}
C
Caioww99
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
H
Heitor_Veloso
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;
}
C
Caioww99
É que é a velocidade do carro no programa , mas mudei isso pra passar como parâmetro na que vai ter carros,motos e caminhões.
H
Heitor_Veloso
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:
assim você garante que ele estará sempre dentro do 1 até o 58.
C
Caioww99
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]
H
Heitor_Veloso
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;