ajudaaaaaa

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

ajudaaaaaa

Mensagempor XKobra » Domingo Nov 01, 2009 23:39

ola a todos
estou a tentar fazer um programa que dada uma matriz 10x10 e dado um certo input do utilizador, o array mude, exemplo:
Código: Seleccionar todos
out.println("Do your move: ");
      Move = input.nextLine();

      for(int x = 0; x < 10; x++)
      {
         if(Move.charAt( 0) ==  'A' && Move.charAt(2) == 'x')
         {
            Board[0][x] = "X";
         }
      }

quando dou o input "A 3", o output deveria ser:
1 2 3 4 5 6 7 8 9 10
A . . X . . . . . .
B . . . . . . . . . .
C . . . . . . . . . .
D . . . . . . . . . .
E . . . . . . . . . .
F . . . . . . . . . .
G . . . . . . . . . .
H . . . . . . . . . .
I . . . . . . . . . .
J . . . . . . . . . .

mas isso nao é o que acontece, alias, nao acontece nada lol...
eu tentei fazer um teste para ver se a condiçao IF esta realmente a ser lida:
Código: Seleccionar todos
for(int x = 0; x < 10; x++)
      {
         if(Move.charAt( 0) ==  'A' && Move.charAt(2) == '1')
         {
            Board[0][x] = "X";
         }
      }

output:
1 2 3 4 5 6 7 8 9 10
A X X X X X X X X X X
B . . . . . . . . . .
C . . . . . . . . . .
D . . . . . . . . . .
E . . . . . . . . . .
F . . . . . . . . . .
G . . . . . . . . . .
H . . . . . . . . . .
I . . . . . . . . . .
J . . . . . . . . . .
a minha pergunta é, porque é que isto acontece?porque é que qunado introduzo "A 5" o Board[0][4] nao muda para X? como posso resolver isto??=\
obrigado por qualquer ajuda que me possam dar desde ja
cheers
ps: codigo feito em java
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor Mercy_PT » Domingo Nov 01, 2009 23:46

Acho que não percebi bem. O objectivo é ter apenas 1 X ou vários (conforme se faz as trocas)?

Se forem vários não precisas complicar basta separar as coordenadas e fazer a mudança do item directo sem percorrer a matriz.

Já quanto ao código que tens usado convem ter em consideração que a matriz começa em 0 e não em 1 portanto para alterar por exemplo o A3 posição deve ser a 4.
Cruising life......in low speed...
Imagem
Mercy_PT
Membro Vitalício
Membro Vitalício
 
Mensagens: 2338
Registado: Terça Set 14, 2004 14:33

Mensagempor XKobra » Domingo Nov 01, 2009 23:55

Mercy_PT Escreveu:Acho que não percebi bem. O objectivo é ter apenas 1 X ou vários (conforme se faz as trocas)?

Se forem vários não precisas complicar basta separar as coordenadas e fazer a mudança do item directo sem percorrer a matriz.

Já quanto ao código que tens usado convem ter em consideração que a matriz começa em 0 e não em 1 portanto para alterar por exemplo o A3 posição deve ser a 4.


boas.
e sim eu sei que a mtriz começa em [0] ou seja a casa "A1" do tabuleiro e [0][0] na matriz.
o objectivo e meter só 1 X na matriz, ou seja se o input for "A 1" o que muda no tabuleiro é a casa [0][0]
sera que me expliquei agora melhor?=\ qualquer duvida de compreensao avisem
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor Mercy_PT » Segunda Nov 02, 2009 0:04

if(Move.charAt( 0) == 'A' && Move.charAt(2) == x)

...== 'x' -> valor x;

...== x -> valor de X (variável)
Cruising life......in low speed...
Imagem
Mercy_PT
Membro Vitalício
Membro Vitalício
 
Mensagens: 2338
Registado: Terça Set 14, 2004 14:33

Mensagempor XKobra » Segunda Nov 02, 2009 1:22

Mercy_PT Escreveu:if(Move.charAt( 0) == 'A' && Move.charAt(2) == x)

...== 'x' -> valor x;

...== x -> valor de X (variável)


eu acho que nao percebeste a minha duvida mais obrigado na mesma.. =\
mais alguem me pode ajudar??
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor bigslb » Segunda Nov 02, 2009 2:13

XKobra Escreveu:
Mercy_PT Escreveu:if(Move.charAt( 0) == 'A' && Move.charAt(2) == x)

...== 'x' -> valor x;

...== x -> valor de X (variável)


eu acho que nao percebeste a minha duvida mais obrigado na mesma.. =\
mais alguem me pode ajudar??


percebeu sim

o que fazes é percorrer a linha da tua matriz e comparar os 2 chars k recebes o 1º corresponde a linha e o segundo a coluna(charAt(0) e charAt(2) respectivamente) certo? kd colocas A 3 ele compara A com A e da true e depois compara 3 com 'x' e nao com x=3...

tira os aplicas do x pa ele comparar com a variável x k percorre a linha da matriz pk se nao esta sp a comparar com o char x e da sp falso...

ja agora estar sp a percorrer a matriz torna.se ineficiente podes indexar directamente consoante o que recebes...
P4 775 3.0
Albatron PX915PC Pro-G
4x512 DDR400 VData/G.Skill ZX
Sapphire X700Pro
WD 320Gb SATA II 16MB
All in a Aerocool Extremeengine 3t
bigslb
Membro Diamante
Membro Diamante
 
Mensagens: 1426
Registado: Quinta Ago 18, 2005 17:16
Localização: Massamá

Mensagempor XKobra » Segunda Nov 02, 2009 12:29

bigslb Escreveu:
XKobra Escreveu:
Mercy_PT Escreveu:if(Move.charAt( 0) == 'A' && Move.charAt(2) == x)

...== 'x' -> valor x;

...== x -> valor de X (variável)


eu acho que nao percebeste a minha duvida mais obrigado na mesma.. =\
mais alguem me pode ajudar??


percebeu sim

o que fazes é percorrer a linha da tua matriz e comparar os 2 chars k recebes o 1º corresponde a linha e o segundo a coluna(charAt(0) e charAt(2) respectivamente) certo? kd colocas A 3 ele compara A com A e da true e depois compara 3 com 'x' e nao com x=3...

tira os aplicas do x pa ele comparar com a variável x k percorre a linha da matriz pk se nao esta sp a comparar com o char x e da sp falso...

ja agora estar sp a percorrer a matriz torna.se ineficiente podes indexar directamente consoante o que recebes...


ja tinha tentado essa soluçao so que quando corro o programa, nao me aparece nada. Move é do tipo String e x é do tipo int.
sera por isso que a comparaçao nao é feita? como resolvo?
e se bem percebi, "ja agora estar sp a percorrer a matriz torna.se ineficiente podes indexar directamente consoante o que recebes..." o que queres dizer com isto é dizer que [0][0] = "A 1" [0][1] = "A 1" mas manualmente? eu queria um ciclo que me fizesse a procura autonomamente senao ia ter IF's que nunca mais acabavam lol..
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Segunda Nov 02, 2009 16:12

Boas, nao podes fazer Move.charAt(2) == x

O 1 (inteiro) que está na variavel x, tem um código binario diferente do caracter '1' do metodo charAt(), como poderas ver numa tabela ascii

Tens de converter um deles para o outro:

pe: Integer.parseInt(""+Move.charAt(2)) == x

[[]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

Mensagempor XKobra » Segunda Nov 02, 2009 16:35

vamosAeles Escreveu:Boas, nao podes fazer Move.charAt(2) == x

O 1 (inteiro) que está na variavel x, tem um código binario diferente do caracter '1' do metodo charAt(), como poderas ver numa tabela ascii

Tens de converter um deles para o outro:

pe: Integer.parseInt(""+Move.charAt(2)) == x

[[]]

Era mesmo isto que eu queria fazer. ja funciona =D obrigado pela ajuda ^^
Ja agora, ha alguma funçao que tambem faça isso para as letras? tava a pensar em ter dois for's a correrem exemplo:
for(int x = 0; x < 10; x++)
{
for(int y = 66; y < 75; y++)
{
if(Integer.toString(' ' + Move.charAt(0) == y) && Integer.parseInt("" + Move.charAt(2)) == x)
{
Tabuleiro[y][x] = "X";
}
}
}
Qualquer coisa assim deste genero, isso iriame facilitar imenso pois ja nao iria precisar de tantos IF's encadeados. mais uma vez obrigado.
ps: y = 66 ate 75 pois representam na tabela ascii o "A" ate "J". agora por curiosidade, eu percebi a conversao do Integer.parseInt("" + Move.charAt(2)) == x, o que eu nao percebi foi a razao pela qual tem que se por "" antes do Move.charAt...
Cumps ^^
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor bigslb » Segunda Nov 02, 2009 17:37

pk o parseInt recebe uma String e Move.charAt(2) vai retornar um char dai teres k colocar o "" pa ele concatenar a String vazia "" com o char que queres e isso resulta numa nova String, mas n é preciso usar o parseint:

como ja referi o Move.charAt(2) retorna um char, imagina o char '3' mas essa char é inteiro corresponde a 51 salvo erro dai ele comparar mal, o k podes fazer é:

(Move.charAt(2) -'0' )== x assim estas a pegar no char 3, por exemplo, k em inteiro é 51 e subtrais 48 k é o char '0' em inteiro segundo a tabel ascii ( http://pt.wikipedia.org/wiki/ASCII ) isso resulta em 3 e depois ele faz a comparação com o que tiver em x, poderas ter que subtrair 1 pois o k tu keres +e meter A 3 e isso afectar a 3ª elemento da linha ou a 3ª posiçao?(pois começa em 0), ou entao começas o fom com x=1...
em relaçao ao indexar directamente, n precisas de ifs, repara:

o A B C D... se subtraires 'A' a cada um deles fica

0 1 2 3 isso vai .te dar o teu y --> Tabuleiro[y][x]

kt ao teu x tens de subtrair '0' ao valor k o Move.charAt(2) retornar

no fundo tens simplesmente isto:

Tabuleiro[Move.charAt(0)-'A'][Move.charAt(2)-'0'] = "X";


isto é possivel pois kd fazer uma operaçao a mesma é feita sempre com inteiros logo ele converte implicitamente os 2 chars em inteiro e faz a conta...

cumps espero ter ajudado kk koisa apita
P4 775 3.0
Albatron PX915PC Pro-G
4x512 DDR400 VData/G.Skill ZX
Sapphire X700Pro
WD 320Gb SATA II 16MB
All in a Aerocool Extremeengine 3t
bigslb
Membro Diamante
Membro Diamante
 
Mensagens: 1426
Registado: Quinta Ago 18, 2005 17:16
Localização: Massamá

Mensagempor Mercy_PT » Segunda Nov 02, 2009 22:26

XKobra Escreveu:
vamosAeles Escreveu:Boas, nao podes fazer Move.charAt(2) == x

O 1 (inteiro) que está na variavel x, tem um código binario diferente do caracter '1' do metodo charAt(), como poderas ver numa tabela ascii

Tens de converter um deles para o outro:

pe: Integer.parseInt(""+Move.charAt(2)) == x

[[]]

Era mesmo isto que eu queria fazer. ja funciona =D obrigado pela ajuda ^^
Ja agora, ha alguma funçao que tambem faça isso para as letras? tava a pensar em ter dois for's a correrem exemplo:
for(int x = 0; x < 10; x++)
{
for(int y = 66; y < 75; y++)
{
if(Integer.toString(' ' + Move.charAt(0) == y) && Integer.parseInt("" + Move.charAt(2)) == x)
{
Tabuleiro[y][x] = "X";
}
}
}
Qualquer coisa assim deste genero, isso iriame facilitar imenso pois ja nao iria precisar de tantos IF's encadeados. mais uma vez obrigado.
ps: y = 66 ate 75 pois representam na tabela ascii o "A" ate "J". agora por curiosidade, eu percebi a conversao do Integer.parseInt("" + Move.charAt(2)) == x, o que eu nao percebi foi a razao pela qual tem que se por "" antes do Move.charAt...
Cumps ^^


Uma função para essa conversão directa não existe, mas nada impede que cries uma função que faça a conversão da letra no número da linha e depois a uses no código principal. Possivelmente e como são poucas linhas isso pode para começo resolver-se com um switch da letra da coordenada.

switch ( expression )
case constant-expression : statement
[default : statement]
Cruising life......in low speed...
Imagem
Mercy_PT
Membro Vitalício
Membro Vitalício
 
Mensagens: 2338
Registado: Terça Set 14, 2004 14:33

Mensagempor XKobra » Segunda Nov 02, 2009 22:47

bigslb Escreveu:pk o parseInt recebe uma String e Move.charAt(2) vai retornar um char dai teres k colocar o "" pa ele concatenar a String vazia "" com o char que queres e isso resulta numa nova String, mas n é preciso usar o parseint:

como ja referi o Move.charAt(2) retorna um char, imagina o char '3' mas essa char é inteiro corresponde a 51 salvo erro dai ele comparar mal, o k podes fazer é:

(Move.charAt(2) -'0' )== x assim estas a pegar no char 3, por exemplo, k em inteiro é 51 e subtrais 48 k é o char '0' em inteiro segundo a tabel ascii ( http://pt.wikipedia.org/wiki/ASCII ) isso resulta em 3 e depois ele faz a comparação com o que tiver em x, poderas ter que subtrair 1 pois o k tu keres +e meter A 3 e isso afectar a 3ª elemento da linha ou a 3ª posiçao?(pois começa em 0), ou entao começas o fom com x=1...
em relaçao ao indexar directamente, n precisas de ifs, repara:

o A B C D... se subtraires 'A' a cada um deles fica

0 1 2 3 isso vai .te dar o teu y --> Tabuleiro[y][x]

kt ao teu x tens de subtrair '0' ao valor k o Move.charAt(2) retornar

no fundo tens simplesmente isto:

Tabuleiro[Move.charAt(0)-'A'][Move.charAt(2)-'0'] = "X";


isto é possivel pois kd fazer uma operaçao a mesma é feita sempre com inteiros logo ele converte implicitamente os 2 chars em inteiro e faz a conta...

cumps espero ter ajudado kk koisa apita

logica perfeita, explicaçao perfeita, resultado perfeito
percebi tudo pudia ter pensado nisso logo nem me ocurreu a ideia
obrigado mais uma vez ^^ acho que ja consigo fazer o resto sosinho
cumps cheers =D
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30


Voltar para Programação

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 0 visitantes

cron