Olá, pessoal, tudo bem?
Então estou com uma dúvida tenho uma trabalho para fazer um jogo da velha usando array multidimensional então conseguir preencher todos os arrays e até fazer a checagem tipo se preencher 3 na mesma linha iguais então vc ganhou o jogo, mais meu problema é o seguinte, em algumas situações mesmo eu preenchendo os 3 campos com “x” em uma determinada linha (nisso ele entra com uma condicional “if” para checar se a linha que você digitou e a coluna é aquela) mas o programa entra num “if” que não era pra entrar, e através do “Debug” eu consigo ver isso e N/AO SEI PORQUE, eu acho q minha lógica está correta, MAIS SOU INICIANTE ENTÃO PODE ESTAR ERRADA OU SEI LÁ, vou colocar a parte que ta dando esse “conflito” caso precise eu posto o código inteiro pra vcs.
do{//check = false;while(checkDentroFor1==false){System.out.println(jogador1+" - Jogador - X");while(checkNum3==false){System.out.println("Entre com a POSX");posX=Integer.parseInt(scan.next());System.out.println("Entre com a POSY");posY=Integer.parseInt(scan.next());if(posX<3&&posY<3){checkNum3=true;}else{System.out.println("Posição errada tente novamente!");}}checkNum3=false;formulaPosX=tabuleiro.length-(posX+1);formulaPosY=tabuleiro[0].length-(posY+1);for(inti=0;i<(tabuleiro.length-formulaPosX);i++){for(intj=0;j<(tabuleiro[i].length-formulaPosY);j++){if(posX==i&&posY==j){if(tabuleiro[i][j]==null){tabuleiro[i][j]="X";System.out.println();System.out.println(jogador1+" - Jogador - X linha "+i+" coluna "+j);System.out.println();//Linhaif(tabuleiro[0][j]!=null&&tabuleiro[0][j].equals("X")){contX0++;if(contX0==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}elseif(tabuleiro[1][j]!=null&&tabuleiro[1][j].equals("X")){contX1++;if(contX1==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}elseif(tabuleiro[2][j]!=null&&tabuleiro[2][j].equals("X")){contX2++;if(contX2==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;//Coluna}elseif(tabuleiro[i][0]!=null&&tabuleiro[i][0].equals("X")){contXY0++;if(contXY0==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}elseif(tabuleiro[i][1]!=null&&tabuleiro[i][1].equals("X")){contXY1++;if(contXY1==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}elseif(tabuleiro[i][2]!=null&&tabuleiro[i][2].equals("X")){contXY2++;if(contXY2==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}checkDentroFor1=true;}else{System.out.println("Campo já preenchido tente de novo");}}else{}}}}
É difícil saber qual o problema postando apenas o código, diga também com quais valores está entrando em conflito e o que está sendo impresso com aqueles valores.
Neetosena
Então eu consegui resolver, adicionando mais uma condicional “if” e tirando os “else if” deixando apenas os “if” vou postar o código inteiro pra vc ver, mais eu consegui fazer funcionar, mais acho q poderia deixar ele bem mais limpo, mais ae eu não sei como.
packageaula20;
import java.util.Scanner;
public class JogoDaVelha {
publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);System.out.println("--------------Jogo da Velha--------------");String[][]tabuleiro=newString[4][4];booleancheck=false;booleancheckDentroFor1=false;booleancheckNum3=false;intcont=0;System.out.println("Digite seu nome 1º jogador");Stringjogador1=scan.next();StringX="X";intposX=0;intposY=0;intformulaPosX=0;intformulaPosY=0;intcontX0=0;intcontX1=0;intcontX2=0;intcontXY0=0;intcontXY1=0;intcontXY2=0;intconDiagX=0;intconDiagX2=0;System.out.println("Digite seu nome 2º jogador");Stringjogador2=scan.next();StringO="O";intposX2=0;intposY2=0;intformulaPosX2=0;intformulaPosY2=0;intcontO0=0;intcontO1=0;intcontO2=0;intcontOY0=0;intcontOY1=0;intcontOY2=0;intconDiagO=0;intconDiagO2=0;do{//check = false;while(checkDentroFor1==false){System.out.println(jogador1+" - Jogador - X");while(checkNum3==false){System.out.println("Entre com a POSX");posX=Integer.parseInt(scan.next());System.out.println("Entre com a POSY");posY=Integer.parseInt(scan.next());if(posX<3&&posY<3){checkNum3=true;}else{System.out.println("Posição errada tente novamente!");}}checkNum3=false;formulaPosX=tabuleiro.length-(posX+1);formulaPosY=tabuleiro[0].length-(posY+1);for(inti=posX;i<(tabuleiro.length-formulaPosX);i++){for(intj=posY;j<(tabuleiro[i].length-formulaPosY);j++){if(posX==i&&posY==j){if(tabuleiro[i][j]==null){tabuleiro[i][j]="X";System.out.println();System.out.println(jogador1+" - Jogador - X linha "+i+" coluna "+j);System.out.println();//Linhaif(tabuleiro[0][j]!=null&&tabuleiro[0][j].equals("X")){if(posX==0){contX0++;//Diagonalif(tabuleiro[0][0]!=null){if(posY==0){conDiagX2++;if(conDiagX2==3){System.out.println(jogador1+" você ganhou!");check=true;}}}//Diagonalif(tabuleiro[0][2]!=null){if(posY==2){conDiagX++;if(conDiagX==3){System.out.println(jogador1+" você ganhou!");check=true;}}}//---------------------------------//if(contX0==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}}if(tabuleiro[1][j]!=null&&tabuleiro[1][j].equals("X")){if(posX==1){contX1++;//Diagonalif(tabuleiro[1][1]!=null){if(posY==1){conDiagX++;conDiagX2++;if(conDiagX==3||conDiagX2==3){System.out.println(jogador1+" você ganhou!");check=true;}}}//---------------------------------//if(contX1==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}}if(tabuleiro[2][j]!=null&&tabuleiro[2][j].equals("X")){if(posX==2){contX2++;//Diagonalif(tabuleiro[2][2]!=null){if(posY==2){conDiagX2++;if(conDiagX2==3){System.out.println(jogador1+" você ganhou!");check=true;}}}if(tabuleiro[2][0]!=null){if(posY==0){conDiagX++;if(conDiagX==3){System.out.println(jogador1+" você ganhou!");check=true;}}}//--------------------------------if(contX2==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}//Coluna}if(tabuleiro[i][0]!=null&&tabuleiro[i][0].equals("X")){if(posY==0){contXY0++;if(contXY0==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}}if(tabuleiro[i][1]!=null&&tabuleiro[i][1].equals("X")){if(posY==1){contXY1++;if(contXY1==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}}if(tabuleiro[i][2]!=null&&tabuleiro[i][2].equals("X")){if(posY==2){contXY2++;if(contXY2==3){System.out.println(jogador1+" você ganhou!");check=true;}checkDentroFor1=true;}}checkDentroFor1=true;}else{System.out.println("Campo já preenchido tente de novo");}}else{}}}}cont+=1;checkDentroFor1=false;if(cont<9&&check==false){while(checkDentroFor1==false){System.out.println(jogador2+" - Jogador - O");while(checkNum3==false){System.out.println("Entre com a POSX2");posX2=Integer.parseInt(scan.next());System.out.println("Entre com a POSY2");posY2=Integer.parseInt(scan.next());if(posX2<3&&posY2<3){checkNum3=true;}else{System.out.println("Posição errada tente novamente!");}}checkNum3=false;formulaPosX2=tabuleiro.length-(posX2+1);formulaPosY2=tabuleiro[0].length-(posY2+1);for(inti=posX2;i<(tabuleiro.length-formulaPosX2);i++){for(intj=posY2;j<(tabuleiro[i].length-formulaPosY2);j++){if(posX2==i&&posY2==j){if(tabuleiro[i][j]==null){tabuleiro[i][j]="O";System.out.println();System.out.println(jogador2+" - Jogador - O linha "+i+" coluna "+j);System.out.println();//Linhaif(tabuleiro[0][j]!=null&&tabuleiro[0][j].equals("O")){if(posX2==0){contOY0++;//Diagonalif(tabuleiro[0][0]!=null){if(posY2==0){conDiagO2++;if(conDiagO2==3){System.out.println(jogador2+" você ganhou!");check=true;}}}//Diagonalif(tabuleiro[0][2]!=null){if(posY2==2){conDiagO++;if(conDiagO==3){System.out.println(jogador2+" você ganhou!");check=true;}}}//---------------------------------//if(contOY0==3){System.out.println(jogador2+" você ganhou!");check=true;}checkDentroFor1=true;}}if(tabuleiro[1][j]!=null&&tabuleiro[1][j].equals("O")){if(posX2==1){contOY1++;//Diagonalif(tabuleiro[1][1]!=null){if(posY2==1){conDiagO++;conDiagO2++;if(conDiagO==3||conDiagO2==3){System.out.println(jogador2+" você ganhou!");check=true;}}}//---------------------------------//if(contOY1==3){System.out.println(jogador2+" você ganhou!");check=true;}checkDentroFor1=true;}}if(tabuleiro[2][j]!=null&&tabuleiro[2][j].equals("O")){if(posX2==2){contOY2++;//Diagonalif(tabuleiro[2][0]!=null){if(posY2==0){conDiagO++;if(conDiagO==3){System.out.println(jogador2+" você ganhou!");check=true;}}}//Diagonalif(tabuleiro[2][2]!=null){if(posY2==2){conDiagO2++;if(conDiagO2==3){System.out.println(jogador2+" você ganhou!");check=true;}}}//---------------------------------//if(contOY2==3){System.out.println(jogador2+" você ganhou!");check=true;}checkDentroFor1=true;}//Coluna}if(tabuleiro[i][0]!=null&&tabuleiro[i][0].equals("O")){if(posY2==0){contO0++;if(contO0==3){System.out.println(jogador2+" você ganhou!");check=true;}checkDentroFor1=true;}}if(tabuleiro[i][1]!=null&&tabuleiro[i][1].equals("O")){if(posY2==1){contO1++;if(contO1==3){System.out.println(jogador2+" você ganhou!");check=true;}checkDentroFor1=true;}}if(tabuleiro[i][2]!=null&&tabuleiro[i][2].equals("O")){if(posY2==2){contO2++;if(contO2==3){System.out.println(jogador2+" você ganhou!");check=true;}checkDentroFor1=true;}}checkDentroFor1=true;}else{System.out.println("Campo já preenchido tente de novo");}}else{}}}}}cont+=1;checkDentroFor1=false;}while(cont<9&&check==false);for(inti=0;i<tabuleiro.length;i++){for(intj=0;j<tabuleiro[i].length;j++){if(tabuleiro[i][j]!=null){System.out.println("tabuleiro["+i+"]["+j+"] = "+tabuleiro[i][j]);}}}}
}
D
diego12
Tente separar alguns trechos do código em métodos:
publicstaticint[]leiaPosicao(Scannerscan,Stringnome){booleancheck=false;intx=-1;inty=-1;while(check==false){System.out.println(nome+", entre com a x");x=Integer.parseInt(scan.next());System.out.println(nome+", entre com a y");y=Integer.parseInt(scan.next());if(x<3&&y<3){check=true;}else{System.out.println("Posição errada tente novamente!");}}int[]posicao=newint[2];posicao[0]=x;posicao[1]=y;returnposicao;}