Adicionar uma letra num array na posição anterior e posterior

Oi pessoal!

Como faço para trocar a letra da posição anterior e posterior.
Se é b passa a ser c
Se é c passa a ser b
mas isso dois lados

Ex;

c b b

quero que depois do if
fique
c=b
b=0 ou vazio,
b= c;

[code] public void joga (){
int quantViradas =0;
int quantFichasB =0;
int numRodadas = 0;
String fichas = “bcccbbc”;
int[] viradas = new int[quantViradas]; // array de quant. que as fichas viraram
int[] rodadas = new int[numRodadas]; // quant. de rodadas

    for (int i=0; i< fichas.length(); i++){
       char b = fichas.charAt(0);
       if (b == 'b')
          quantFichasB++;
          viradas[i]= 0;
               if (b=='c')
                viradas[i]= 1;
               if(quantFichasB%2==0)
                  continue;
          //começo do jogo : vai tirando todas as fichas até terminar o jogo
          for (int j=0; i< fichas.length(); j++){
              if (b == 'b')
                  quantFichasB = fichas.length()-1;
                  if (fichas.charAt(j-1)=='b')
                      fichas[j]= 'c';
                  else
                      fichas[j]= 'b';
               if (fichas.charAt(j+1)=='b')
                      fichas[j]= 'c';
                  else
                      fichas[j]= 'b';
               if (fichas.charAt(j+1)== 0) //aqui é se não tem nada na posição
                      fichas[j]= 0;
              
                viradas[j] = j+1; // array de quant. que as fichas viraram e vai incrementando até acabar as fichas
                rodadas[j] = j+1; // conta uma rodada do jogo     

        }
    
}

}[/code]

Nossa, não consegui entender a pergunta… explica melhor por favor.

c=b
b=0 ou vazio,
b= c;

se b = 0 ele num vai poder ser C
mas c pode fazer o seguinte segue uma logica matematica

F(n +1) && F(n-1) vai da certo =)

Oi !

O que eu preciso na verdade é comparar conteúdo daquela posição e inverte-lo.

Então a pesgunta seria:

Como pegar o conteúdo (string ou char) da posição anterior e inverte-lo?

[quote=jo83]Oi !

O que eu preciso na verdade é comparar conteúdo daquela posição e inverte-lo.

Então a pesgunta seria:

Como pegar o conteúdo (string ou char) da posição anterior e inverte-lo?[/quote]

do jeito que eu falei da um .equals pra comparar string, e compara o contador do array -1

Consigo comparar, só não consigo inverter.

Se tenho um b então vai c
se tenho um c então vai c

como trocar os carateres no array?

[quote=jo83]Consigo comparar, só não consigo inverter.

Se tenho um b então vai c
se tenho um c então vai c

como trocar os carateres no array?[/quote]

me pasas seu codigo ai pra ve que que voce ta fazendo

Segue o código:

[code] public void joga (){
int quantViradas =0;
int quantFichasB =0;
int numRodadas = 0;
char a,c;
String fichas = “bcccbbc”;
String novasFichas ="";
int[] viradas = new int[quantViradas]; // array de quant. que as fichas viraram
int[] rodadas = new int[numRodadas]; // quant. de rodadas

    for (int i=0; i< fichas.length(); i++){
       char b = fichas.charAt(0);
       if (b == 'b')
          quantFichasB++;
          viradas[i]= 0;
               if (b=='c')
                viradas[i]= 1;
               if(quantFichasB%2==0)
                  continue;
          //começo do jogo : vai tirando todas as fichas até terminar o jogo
          for (int j=0; i< fichas.length(); j++){
              if (b == 'b')
                 quantFichasB = fichas.length()-1;
                  if (fichas.charAt(j-1)=='b')
                      fichas.equals(b)=fichas[j].replace(b, c);
                  else
                      fichas[j]= 'b';
               if (fichas.charAt(j+1)=='b')
                      fichas[j]= 'c';
                  else
                      fichas[j]= 'b';
               if (fichas.charAt(j+1)== 0) //aqui é se não tem nada na posição
                      fichas[j]= 0;
              
                viradas[j] = j+1; // array de quant. que as fichas viraram e vai incrementando até acabar as fichas
                rodadas[j] = j+1; // conta uma rodada do jogo     

        }
    
}

[/code]

Olá amigo jo83,

Dê uma olhada nesse código que montei de exemplo para você, acho que vai te ajudar:

[code]public class A{

public static void main(String[] arg){

	StringBuffer fichas = new StringBuffer("bcccbbc");
	System.out.println(fichas );

	char b = fichas.charAt(0 );
	System.out.println(b );

	if(fichas.charAt(0 ) == 'b'){
		fichas.setCharAt(0, 'a');
		System.out.println(fichas.charAt(0 ));
	}
}

}[/code]

Se você queria o procedimento para alterar caracteres de uma String, essa é uma solução.

Mas se vocês quer a lógica para alterar um caractere antes e um depois de determinado caractere vamos ter que raciocinar um pouco mais…

[color=red]EDIT:[/color]

Esse resolve seu problema caso o que você precise for a lógica de mudar caracteres antes e depois, lá vai:

[code]public class A{
public static void main(String[] arg){

	StringBuffer fichas = new StringBuffer("bcccbbc");
	System.out.println(fichas );
	char b = fichas.charAt(0);

	for(int i=0; i < fichas.length(); i++){
		
		if(i>0)
		if(fichas.charAt(i-1) == 'c')
			fichas.setCharAt(i-1, 'b');
		else
			fichas.setCharAt(i-1, 'c');
		//System.out.println(fichas);
		if(i<fichas.length()-1)
		if(fichas.charAt(i+1) == 'b')
			fichas.setCharAt(i+1, 'c');
		else
			fichas.setCharAt(i+1, 'b');
		System.out.println(fichas);

	}
}

}[/code]

[color=red]Saída:[/color][code]C:\Users\Vingdel\Desktop>javac A.java

C:\Users\Vingdel\Desktop>java A
bcccbbc
bbccbbc
cbbcbbc
ccbbbbc
cccbcbc
ccccccc
ccccbcb
ccccbbb[/code]

Abraço!

Olá Vingdel!

testei o código aqui ele ele dá erro no comando setChatAt

o que poderia ser?

[quote=jo83]Olá Vingdel!

testei o código aqui ele ele dá erro no comando setChatAt

o que poderia ser?[/quote]

Olá jo83,

O erro está acontecendo pois o método [color=red]setChatAt()[/color] não existe o correto é [color=green]setCharAt()[/color]. Pode ter ocorrido um erro quando você digitou o código.

E lembre-se, esse método é da classe StringBuffer.

[color=red]EDIT:[/color] A propósito, de que jogo se trata? Tem as regras do mesmo para me passar?

Abraço!

Tem regras sim:

tem fichas b e c
só pode tirar as b
quando tiro uma b a anterior e posterior trocam.
Ex.

cbc

depois que eu tiro abranca tem que ficar

b0b

é como se invertesse.
o 0 que coloquei é para sinbolizar vazio.

Mas bem, agora consegui fazer reconhecer o comando mas dá erro de indice.
Como faço para ele me retornar o resultado?

[code] public void joga (){
int quantViradas =0;
int quantFichasB =0;
int totalFichas=0;
int numRodadas = 0;
char a,c;
StringBuffer fichas = new StringBuffer (“bbbbcc”);
char b = fichas.charAt(0);
int[] viradas = new int[quantViradas]; // array de quant. que as fichas viraram
int[] rodadas = new int[numRodadas]; // quant. de rodadas

    for (int i=0; i< fichas.length(); i++){
         if (fichas.charAt(i)=='b')
         quantFichasB++;
         }
        if(quantFichasB%2==1)
                   System.out.println( "Jogo sem solução");
        else
            System.out.println( "Iniciando jogo");

       for (int i=0; i< fichas.length(); i++){
            if (fichas.charAt(i)=='b')
             fichas.setCharAt(i, '0');
                 if(fichas.charAt(i-1) == 'c')
                 fichas.setCharAt(i-1, 'b');
        else
                 fichas.setCharAt(i-1, 'c');

                 if(fichas.charAt(i+1) == 'c')
                 fichas.setCharAt(i+1, 'b');
        else
                 fichas.setCharAt(i+1, 'c');
        System.out.println(fichas);

        }     
    }
}[/code]

Pronto, seu código corrigido.

Mas se for seguir a sua regra, ainda tem acertar uma coisa, pois estão trocando as letras independente de a do meio ser ‘b’ ou ‘c’.

Para mudar só se for ‘b’, vc tem descomentar as linhas 21 e 33 DO CODIGO ABAIXO, para libetar as chaves “{}” e expandir o bloco do IF que verifica se a posição atual é igual a ‘b’.

Outra coisa, não sei o que é para ser feito com as posições que ganharam ‘0’, então não não fiz nada com os zeros, porém acredito que tenha mais alguma coisa para fazer com eles…

De onde vc tirou esse jogo? É um jogo de cartas de baralho? Se puder, fale um pocuo sobre ele.

[code] public joga (){
int quantViradas =0;
int quantFichasB =0;
int totalFichas=0;
int numRodadas = 0;
char a,c;
StringBuffer fichas = new StringBuffer (“bbbbcc”);
char b = fichas.charAt(0);
int[] viradas = new int[quantViradas]; // array de quant. que as fichas viraram
int[] rodadas = new int[numRodadas]; // quant. de rodadas

	for (int i=0; i< fichas.length(); i++){
		if (fichas.charAt(i)=='b')
			quantFichasB++;
	}
	if(quantFichasB%2==1)
		System.out.println( "Jogo sem solução");
	else
		System.out.println( "Iniciando jogo");
	for (int i=0; i< fichas.length(); i++){
		if (fichas.charAt(i)=='b') // { //Se mudar apenas se for 'b'
			fichas.setCharAt(i, '0');
		if(i>0) // Se posição maior que 0, pois não pode alterar posição -1
			if(fichas.charAt(i-1) == 'c')
				fichas.setCharAt(i-1, 'b');
			else if(fichas.charAt(i-1) == 'b')
				fichas.setCharAt(i-1, 'c');
		if(i<fichas.length()-1) // Se posição menor que última, pois não pode alterar posição depois da última hehehe
			if(fichas.charAt(i+1) == 'c')
				fichas.setCharAt(i+1, 'b');
			else if(fichas.charAt(i+1) == 'b')
				fichas.setCharAt(i+1, 'c');
		//} // Se mudar apenas caso for 'b'
			System.out.println(fichas);
	}     
}[/code]

Abraço e boa sorte!