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

Mensagempor XKobra » Sábado Nov 14, 2009 4:17

eu sei que sou chato lol mas tenho a minha provavel ultima duvida.
desta vez tenho que pelo que percebi ter um método boolean qualquerNome(char[][] board), que indica se a coordenada que o utilizador introzu é valida para o tabuleiro mas tem que ser passado como argumento (dai a minha grande dificuldad =\), ah e tenho que ter em conta as o tamanho da matriz que é passada. nao sei se me expliquei bem mas talvez plo codigo que ja tenho feito se torne mais claro:
Código: Seleccionar todos
boolean qualquerNome(char[][] board)
   {
      boolean verdade = false;
      for(int x  = 0; x < board.length; x++)
      {
         for(int y = 0; y < board[x].length; y++)
         {
               if((getLine - 65) == x && (getColumn - 1) == y)
               {
                  verdade = true;
               }
               else
               {
                  verdade = false;
               }
            }
         }
      }
      return verdade;
   }

nota: linha e coluna teem uma subtracçao pois a variavel linha e inicializada com 65 (que em codigo ascii é A) e coluna a 1 pois como nao ha coordenadas 0 so ha de 1 pra cima tenho que subetrairlhe umpra ter a casa do array.
o que estou a tentar validar ai é que se a posicao linha/coluna corresponder a uma posicao x/y entao validar como correcto, senao como falso.
eu penso que seja isso que eu esteja a fazer so que mais uma vez a correcçao do meu prof nao admite como correcto dando isto: "The coordinate (A,1) should be valid."
mais uma vez, tens alguma dica pra me ajudares?
desculpa la tar sempre a perguntar cenas...
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor XKobra » Sábado Nov 14, 2009 21:24

boas noites. mais uma vez preciso de ajuda lol.
o que se passa é o seguinte, eu consegui validar todas as condiçoes impostas do exercicio para validar o metodo como correcto so que ha uma em aprtircular que diz "junit.framework.AssertionFailedError: null"
é como se o metodo nao retornasse nada. eis um exemplo do codigo:

nota isto valida coisas como:
A1 Z99 Z100 BB
true true false false

(isto na correcçao automatica)

Código: Seleccionar todos
      for(int x = 65; x <= 90; x++)
         for(int y = 49; y <= 57; y++)
               if(string.charAt(0) == x && string.charAt(1) == y)
                  verdade = true;
               else
                  if(string.length() > 3)
                     verdade = false;
      return verdade;

da tudo bem so me da mesmo esse erro de null, tens alguma ideia do que sera?=\
Editado pela última vez por XKobra em Sábado Nov 14, 2009 23:10, num total de 1 vez.
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Sábado Nov 14, 2009 22:56

Boas,

com base no ultimo exemplo, a única maneira de devolver null, é se a ver verdadeiro for do tipo Boolean (e nao boolean), pois se nunca nenhuma condição dos ifs se virificar, essa var pode nunca ser inicializada. Assim como o qual é a diff entre coordinateAsString e string.

Apenas com base nesse cod fica dificil perceber.

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

Mensagempor XKobra » Sábado Nov 14, 2009 23:09

vamosAeles Escreveu:Boas,

com base no ultimo exemplo, a única maneira de devolver null, é se a ver verdadeiro for do tipo Boolean (e nao boolean), pois se nunca nenhuma condição dos ifs se virificar, essa var pode nunca ser inicializada. Assim como o qual é a diff entre coordinateAsString e string.

Apenas com base nesse cod fica dificil perceber.

Cumps

ah desculpa, quanto ao coordinateAsString esquece, o nome da String nesse exemplo todo e "string". fui eu que me enganei lol. ja corrijo na citaçao a cima.
e deixa ver se percebi, o que me estas a dizer é que a minha variavel booleana esta mal inicializada ou nunca passa a verificaçao dos if's?? mas como ?=\
eu criei a variavel assim: boolean verdade = false;
mesmo que ela nao passe nos if's, como esta inicializada já á partida, deveria devolver pelo menos false certo?
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Domingo Nov 15, 2009 0:02

Sim, se for boolean (com b pequeno) garantidamente nunca retorna null (os primitvos nunca estao a 'null').

Nao sei é se o cod faz o q é suposto. Porque o caso de string.lenght == 3 parece que nao está contemplado, ou seja, se lenght for maior que 3 poes false, se nao for verificas o valor de chatAt(0) e chatAt(1), e o valor de charAt(2)?? É suposto ser mesmo assim?

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

Mensagempor XKobra » Domingo Nov 15, 2009 0:16

vamosAeles Escreveu:Sim, se for boolean (com b pequeno) garantidamente nunca retorna null (os primitvos nunca estao a 'null').

Nao sei é se o cod faz o q é suposto. Porque o caso de string.lenght == 3 parece que nao está contemplado, ou seja, se lenght for maior que 3 poes false, se nao for verificas o valor de chatAt(0) e chatAt(1), e o valor de charAt(2)?? É suposto ser mesmo assim?

Cumps

agarrando nestes exemplos :
nota isto valida coisas como:
A1 Z99 Z100 BB
true true false false

acho que cubro tudo nao?
valido como true todas as letras de A a Z e falido todos os numeros de 0 a 99.
o lenght > 3 está ai por causa mesmo de coisas como o exemplo 3 (Z100) e consigo tambem cobrir o ultimo exemplo (BB) porque digo nas condiçoes que a unica casa valida para letras é a charAt(0);
acho que nao em esqueci de dar exemplo de mais nenhum suposto input para validar como true ou false.
achas que nao tou a cubrir ou melhor dizendo, tou a cubrir alguma coisa mal?
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Domingo Nov 15, 2009 12:19

Que acontece se experimentares A9B? E o valor da coluna pode ir até que valor? (99?)

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

Mensagempor XKobra » Domingo Nov 15, 2009 19:03

vamosAeles Escreveu:Que acontece se experimentares A9B? E o valor da coluna pode ir até que valor? (99?)

Cumps


nao sou eu que testo é a correcçao que testa autonomamente, introduz valores uns aleatorios outros ja predefinidos para verificar seo meu metodo faz o que é preciso se nao.
mas supostamente deveria dar false se introduzisse "A9B";
e sim, o valor da coluna pode ir de 0 a 99;
na condiçao do string > 3, esquecime de tbm por && string.charAt(2) != y (pois so pode levar numeros se acontwecer esta situaçao) entao veradade = false;

achas que podera mesmo ser alguma condiçao que fiz mal?
cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Mensagempor vamosAeles » Domingo Nov 15, 2009 22:27

Boas,
vamos lá a ver:

pegando no teu cod(já com a condição do teu post anterior - string.charAt(2) != y):
Código: Seleccionar todos
for(int x = 65; x <= 90; x++)
         for(int y = 49; y <= 57; y++)
               if(string.charAt(0) == x && string.charAt(1) == y)
                  verdade = true;
               else
                  if(string.length() > 3 && string.charAt(2) != y)
                     verdade = false;
      return verdade;



Disses-te antes:
nota isto valida coisas como:
A1 Z99 Z100 BB
true true false false

Tendo em conta de novo o exemplo de cod acima:
Z99 dá true, assim como Z9? (? pode ser qq caracter)
Também tens de testar se o 3 caractere é um número

Uma sugestão:
em vez de estares a percorrer todos as letras e numeros em dois ciclos for, testa logo se a letra é mesmo uma letra e o mesmo para os números:
1)Tou a assumir que a letra vai de A a Z, numero de 1 a 99
2)Tb assumo que nao haja espaços na var string, ie, a letra tem de estar na posicao 0 e os numeros na posicao 1( ate 9) ou na posicao 1 e 2 (10 a 99)
Código: Seleccionar todos
boolean verdade = false;
if(string.length() == 2 || string.length() == 3){
    if(string.charAt(0) >= 65 && string.charAt(0) <= 90 && string.charAt(1) >= 49 && string.charAt(1) <= 57){
        if(string.length() == 2) {
            verdade = true;
        }
        else if(string.charAt(2) >= 48 && string.charAt(2) <= 57){
            verdade = true;
        }
    }
}
return verdade;



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

Mensagempor XKobra » Domingo Nov 15, 2009 23:53

vamosAeles Escreveu:Boas,
vamos lá a ver:

pegando no teu cod(já com a condição do teu post anterior - string.charAt(2) != y):
Código: Seleccionar todos
for(int x = 65; x <= 90; x++)
         for(int y = 49; y <= 57; y++)
               if(string.charAt(0) == x && string.charAt(1) == y)
                  verdade = true;
               else
                  if(string.length() > 3 && string.charAt(2) != y)
                     verdade = false;
      return verdade;



Disses-te antes:
nota isto valida coisas como:
A1 Z99 Z100 BB
true true false false

Tendo em conta de novo o exemplo de cod acima:
Z99 dá true, assim como Z9? (? pode ser qq caracter)
Também tens de testar se o 3 caractere é um número

Uma sugestão:
em vez de estares a percorrer todos as letras e numeros em dois ciclos for, testa logo se a letra é mesmo uma letra e o mesmo para os números:
1)Tou a assumir que a letra vai de A a Z, numero de 1 a 99
2)Tb assumo que nao haja espaços na var string, ie, a letra tem de estar na posicao 0 e os numeros na posicao 1( ate 9) ou na posicao 1 e 2 (10 a 99)
Código: Seleccionar todos
boolean verdade = false;
if(string.length() == 2 || string.length() == 3){
    if(string.charAt(0) >= 65 && string.charAt(0) <= 90 && string.charAt(1) >= 49 && string.charAt(1) <= 57){
        if(string.length() == 2) {
            verdade = true;
        }
        else if(string.charAt(2) >= 48 && string.charAt(2) <= 57){
            verdade = true;
        }
    }
}
return verdade;



Cumps

realmente tens razao, assim escuso de ter for's encadeados os if's fazemme o trabalho sozinhos. e eu como isto era exemplo de explicaçao nao disse, eu ate tinha tres fores encadeados pois as letras pequenas de a a z tbm tinham que entrar lool funciona tudo na perfeiçao na mesma. a correcçao testa o codigo e o codigo passa a tudo menos a uma coisa que se chama mapear coordenada qualquer coisa assim, da sempre "null" começo é a pensar que a tal correcçao tem aquilo com erro achas que é possivel lol? eu ja entreguei o trabalho de qualquer maneira com aquela unica falha, mas mesmo assim, gostava de perceber o porque de me dar aquilo como null ja dei voltas a cabeça e nao vejo onde é que está a falha =|
obrigadao pela a ajuda
se tiveres mais alguma dica agradeço sempre.
Cumps
XKobra
Aprendiz
Aprendiz
 
Mensagens: 28
Registado: Domingo Nov 01, 2009 23:30

Anterior

Voltar para Programação

Quem está ligado:

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

cron