duvida rapida java

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

duvida rapida java

Mensagempor XKobra » Terça Nov 10, 2009 22:20

Código: Seleccionar todos
       int getLine;
      int   getColumn = 0;
      
      
         Scanner input = new Scanner(System.in);
         System.out.println("mete jogada: ");
         String coordinate = input.nextLine();
         char[][] board = new char[10][10];
         getLine = coordinate.charAt(0) - 'A';
         if(coordinate.charAt(1) == '1' && coordinate.charAt(2) == '0')
         {
            getColumn = 9;
         }
         else
            {
               getColumn = coordinate.charAt(1) - '1';
            }
         out.println(getLine);
         out.println(getColumn);
         for(int x = 0; x < 10; x++)
         {
            for(int y = 0; y < 10; y++)
            {
               if(board[getLine][getColumn] == board[x][y])
               {
                  out.println("verdadeiro");
                  break;
               }
               else
               {
                  out.println("falso");
                  break;
               }
            }
         }

tenho um problema com este codigo. quando dou input de "A1" supostamente deveriame devolver "verdadeiro" pois A1 = [0][0] no char board. e quando dou input de "A10" deveria referir a casa [0][9] do array.
mas isso nao acontece. quando eu meto "A10" tudo muito bem consigome referir a casa [0][9], mas quando meto "A1" ele dame erro diz que "String index out of range: 2" ele consegue chegar ao charAt(2) e devolve erro pk? como é que resolvo esta situaçao?
secalhar nao me expliquei muito bem mas nao estou em casa e nao tenho net neste momento =\ mas qualquer duvida sobre o codigo ou explicaçao digam que assim que puder respondo.
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Quarta Nov 11, 2009 20:03

Boas,

tens de testar tb se o charAt(2) 'existe',

tipo: if(coordinate.charAt(1) == '1' && coordinate.length() > 2&& coordinate.charAt(2) == '0')

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

Mensagempor XKobra » Quinta Nov 12, 2009 9:41

vamosAeles Escreveu:Boas,

tens de testar tb se o charAt(2) 'existe',

tipo: if(coordinate.charAt(1) == '1' && coordinate.length() > 2&& coordinate.charAt(2) == '0')

Cumps,
[[]]

boas, desde ja obrigado pela tua sugestao funciona ^^ mas o que se passa é que ele admiteme tambem numeros de 10 para cima, ou seja se eu der input de A11, ele pegame so no primeiro 1 do agarismo 11 e admite como sendo [0][0], eu queria que ele so me admiti-se numeros de 1 a 10 dando como falso todos os outros < 1 e > 10. alguma sugestao?=|
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Quinta Nov 12, 2009 10:00

Por exemplo, experimenta algo tipo:

...
if(coordinate.length() == 3)
{
getColumn = Integer.parseInt(""+coordinate.charAt(1)+coordinate.charAt(2)) - 1;
}
else // coordinate.length() == 2
{
getColumn = coordinate.charAt(1) - '1';
}

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

Mensagempor XKobra » Quinta Nov 12, 2009 23:25

vamosAeles Escreveu:Por exemplo, experimenta algo tipo:

...
if(coordinate.length() == 3)
{
getColumn = Integer.parseInt(""+coordinate.charAt(1)+coordinate.charAt(2)) - 1;
}
else // coordinate.length() == 2
{
getColumn = coordinate.charAt(1) - '1';
}

Cumps,
[[]]

obrigado man ^^consegui o que queria.
so queria que me desses uma ajuda so mais numa coisa por enquanto, mas da-me o raciocinio logico a ver seu chego á soluçao sff:
tipo o que eu quero fazer agora é o seguinte, quero conseguir devolver de 1 a 10 isto:
(A,1)
(A,2)
(A,3) e por ai adiante ate (A,10) ora ate (A,9) tudo muito bem, o problema é quando o programa verifica caractere seguinte ao 9, dame uma coisa do tipo (A,:) porque? porque nao existe codigo binario para o caractere 10, o algarismo 10 e a junçao do '1' com o '0'.

Código: Seleccionar todos
                getLine += 65;
      getColumn += 49;
      if(getColumn > 57)
      {
         getColumn = '1' + ',' + '0';
      }

      System.out.println("(" + (char)getLine + "," + (char)getColumn + ")";);
tens alguma ideia de como consigo verificar o algarismo 10?
obrigadao mais uma vez tens sido uma grande ajuda ^^
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Sexta Nov 13, 2009 1:41

Presumo que te de (A,: ), o ':' é o caracter a seguir ao '9', ie, ':' = '9' + 1, como podes ver numa tabela ascii


Relativamente ao código binário para o caractere '10', isso nao existe, o 10 não é nenhum caractere.
O código binário do algarismo 10 (inteiro), é 10, lol, que corresponde ao caractere NL (ve de novo na tabela ascii).

Agora que queres dizer com o código da junção de '1' com '0'?
'1'+'0'? isso dá 97 ('a')

Relativamente a questão principal que colocas, nao percebi bem, verificar no if ou como imprimir 10 no println??

com (char)getColumn, nunca vai imprimir "10", isso apenas vai imprimir um caracter, nesse exemplo: '1' + ',' + '0' = 144, convertido pra char, vai dar imprimir ? ou algo assim.

Usando apenas a variável getColumn no println, para aparecer 10, tens mesmo de la por valor 10 (inteiro) e nao converteres para char.


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

Mensagempor XKobra » Sexta Nov 13, 2009 2:04

vamosAeles Escreveu:Presumo que te de (A,: ), o ':' é o caracter a seguir ao '9', ie, ':' = '9' + 1, como podes ver numa tabela ascii


Relativamente ao código binário para o caractere '10', isso nao existe, o 10 não é nenhum caractere.
O código binário do algarismo 10 (inteiro), é 10, lol, que corresponde ao caractere NL (ve de novo na tabela ascii).

Agora que queres dizer com o código da junção de '1' com '0'?
'1'+'0'? isso dá 97 ('a')

Relativamente a questão principal que colocas, nao percebi bem, verificar no if ou como imprimir 10 no println??

com (char)getColumn, nunca vai imprimir "10", isso apenas vai imprimir um caracter, nesse exemplo: '1' + ',' + '0' = 144, convertido pra char, vai dar imprimir ? ou algo assim.

Usando apenas a variável getColumn no println, para aparecer 10, tens mesmo de la por valor 10 (inteiro) e nao converteres para char.


[[]]

isto é um bocado complicado explicar porque eu tenho que fazer uma class, e essa class tem uma correcçao semi-automatica feita pelo meu professor. e nesta class ele quer que eu faça isso mesmo, ja consegui representar o 10 lol representeio como um inteiro e pronto so que quando corro o programa, na correcçao do professor diz la "junit.framework.AssertionFailedError: Invalid textual representation: "(A,10)"" e nao me admite aquilo como estando a class bem feita. ja nao sei mesmo o que fazer ja dei voltas e voltas a isto =| o codigo que alterei pra representar tbm o 10 esta assim:


Código: Seleccionar todos
getLine += 65;
      getColumn += 49;
      if(getColumn > 57)
      {
         getColumn = 10;
         out.println("(" + (char)getLine + "," + getColumn + ")");
      }
      else
      {
         out.println("(" + (char)getLine + "," + (char)getColumn + ")");
      }
se estiveres mais ou menos a ver o meu problema e se puderes ajudar agradeçote mesmo, senao deixa estar =\
de qualquer forma obrigado pla tua ajuda ate aqui =D
cumps^^
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Sexta Nov 13, 2009 10:45

Então,
qd submetes isso lá na cena no prof, o que aquilo faz é verificar o output da tua classe com um predefinido?? Se sim, qual deve ser pro 10?(Qd andava na universidade, acho q tb tive uns trabs assim, a long time ago :p)

Ou verifica mesmo se a tua classe tá 'construida' de uma determinda maneira?


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

Mensagempor XKobra » Sexta Nov 13, 2009 11:15

vamosAeles Escreveu:Então,
qd submetes isso lá na cena no prof, o que aquilo faz é verificar o output da tua classe com um predefinido?? Se sim, qual deve ser pro 10?(Qd andava na universidade, acho q tb tive uns trabs assim, a long time ago :p)

Ou verifica mesmo se a tua classe tá 'construida' de uma determinda maneira?


Cumps

as duas coisas, ele verifica se a class toString existe, e admite como certo isso, e dps faz varias verificaçoes,(A,1) ate (A,10) o output da todo bem ate ao 9, o problema é mesmo quando chega ao 10 da esse erro lol, como o erro parece dizer que a textualizaçao esta incorrecta pensei que fosse por eu por 10 como inteiro entao meti "10" para ele admitir como texto, mas mesmo assim da mal com o mesmo erro lool nao faço a minima ideia porque =| repondendo a tua pergunta, sim a correcçao semiautomatica do prof ja tem la umas coisas que quando a class existe ele faz logo a verificaçao de se ela esta bem feita e coma a por automaticamente os valores de A1 ate A10.
respondi a tua pergunta? achas que me consegues fazer perceber o que eé que esta mal agora? lol
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Sexta Nov 13, 2009 13:01

Qd dizes class toString, é o método toString. E esse existe sempre, mesmo que não o redefinas, e nesse caso usa o das classes acima na hiearquia (até o achar), que no limite poderá ser o da própria classe Object.

Relativo ao erro, se garantes que o output deverá ser mesmo (A,10)??, e mesmo assim dá erro no junit, fica dificil ajudar sem perceber que verificações são essas que o prof faz na tua classe.

Se essas verificações forem feitas por um processo automático (o que aparenta ser), penso q a única maneira de fazer essas verificoes, é se o retorno de determinados métodos (ou variaveis) predefinidos (ie, que a tua classe tb terá de ter) são tb os esperados. (um exemplo é o toString ou o output da sua execução)


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

Mensagempor XKobra » Sexta Nov 13, 2009 15:14

vamosAeles Escreveu:Qd dizes class toString, é o método toString. E esse existe sempre, mesmo que não o redefinas, e nesse caso usa o das classes acima na hiearquia (até o achar), que no limite poderá ser o da própria classe Object.

Relativo ao erro, se garantes que o output deverá ser mesmo (A,10)??, e mesmo assim dá erro no junit, fica dificil ajudar sem perceber que verificações são essas que o prof faz na tua classe.

Se essas verificações forem feitas por um processo automático (o que aparenta ser), penso q a única maneira de fazer essas verificoes, é se o retorno de determinados métodos (ou variaveis) predefinidos (ie, que a tua classe tb terá de ter) são tb os esperados. (um exemplo é o toString ou o output da sua execução)


Cumps

JA CONSEGUI ^^ tinha que admitir em primeiro lugar o getColumn como inteiro, sempre, e o que eu estava a fazer era a porlhe o codigo do caractere de 1 ate 9, assim quando ele verificava o 10 encontrada ':' e dava erro. mas agora ja ta fx obrigadao pla ajuda =D
se precisar de mais alguma dica e se puderes ajudar eu posto aqui thx ^^
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor XKobra » Sexta Nov 13, 2009 15:44

e eis uma duvida.
desta vez que quero receber uma String vamos imaginar receber "A", e fazer uma comparaçao, se a comparaçao for verdadeira == true senao == false:
Código: Seleccionar todos
System.out.println("Inpput: ");   
      String string;
      string = input.nextLine();
         char[] letras = {'A', 'B'};
      for(int x = 0; x <= letras.length - 1; x++) //A-Z
      {
         for(int y = 0; y < string.length(); y++)
         {
            if(string.charAt(y) == letras[x])
                  {
                     verdade = true;
                  }
            else
            {
               verdade = false;
            }
         }
      }

eu pus de A a B para facilitar porque postreormente quero fazer a comparaçao de A a Z. mas neste exemplo o que acontece é que se eu por input de "A" ele dame falso se eu puser "AB" ele validame como correcto, ou seja tenho que o parar no A ou no B dependendo do input, ja tentei break; mas sem sucesso, alguma ideia que me ilumine? lol
ou estarei a ir por um caminho mais complicado?=\ eu de qualquer maneira
vou continuar a tentar se entretanto puderes darme alguma dica de como chegar la agradeço sempre lol
cumps ^^
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Sexta Nov 13, 2009 18:14

Pois,

como tens, só da true no fim dos ciclos, se a ultima letra no input for igual à ultima do array de letras, umas vez que estás sempre a 'esmagar' o valor em cima da var verdade

Se puseres AB o q é suposto acontecer/imprimir? (uma vez que o array de letras contém A e B)


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

Mensagempor XKobra » Sexta Nov 13, 2009 23:53

vamosAeles Escreveu:Pois,

como tens, só da true no fim dos ciclos, se a ultima letra no input for igual à ultima do array de letras, umas vez que estás sempre a 'esmagar' o valor em cima da var verdade

Se puseres AB o q é suposto acontecer/imprimir? (uma vez que o array de letras contém A e B)


Cumps

se eu puser AB supostamente deveria validar como true, assim como se so introduzisse A ou so metesse B.
se eu por exemplo metesse "$#%$#%#$" deveriame dar como false
o objectivo aqui é receber uma String e verificar se ela serve para ser uma coordenada exemplo "A1" serve, "A 1" serve "z #$%#$%" nao serve. ou seja eu tenho que eu para fazer isto pego na minha String e tirolhe todos os espaços em branco e dps digolhe que se o charAt(0) == a algum do codigo ASCII de A ate onde quero && charAt(1) == 1 ate 10, entao valida como verdadeiro, senao valida como falso.
eu consigo fazer tudo a parte em que falho mesmo é quando comparo a String com os caracteres que só se eu puser tudo, nesse caso "AB" só ai é que ele me valida como verdadeiro. nao sei se me expliquei bem mas assim ja tens alguma dica que me consigas dar pra eu chegar la? lol
qualquer duvida de me ter explicado mal ou assim avisa.
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor XKobra » Sábado Nov 14, 2009 2:14

XKobra Escreveu:
vamosAeles Escreveu:Pois,

como tens, só da true no fim dos ciclos, se a ultima letra no input for igual à ultima do array de letras, umas vez que estás sempre a 'esmagar' o valor em cima da var verdade

Se puseres AB o q é suposto acontecer/imprimir? (uma vez que o array de letras contém A e B)


Cumps

esquece o que eu disse, ja consegui fazer o que queria thx na mesma ^^
se dps tiver outra duvida, depois posto.
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Próximo

Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron