Achando o valor do vetor

8 respostas
P

Pessoal,
nesse programa, montei um tabela q tem um valor para cada tipo de palavra válida…q foram armazenados em vetores.
A tabela já foi montada e o teste para checar se a palavra é válida também.
O programa lê as palavras em um arquivo, só q estou tendo problema em achar os valores das palavras válidas.
Esta parte corresponde a impressão da palvra e é onde creio eu está o erro:

public static void main(String[] args)throws IOException { int tam = 83681; String pal; String[] tab = new String[tam]; monta_tab(tab); Scanner aPal = new Scanner(new FileReader("palavras.pal")); while (aPal.hasNext()){ pal = aPal.next(); if (valida(pal)) { System.out.println(pal+ -> "+tab); } else { System.out.printf("%s -> 0\n", pal) ; } } }

Nessas condições, o q é impresso é:
mnop -> [Ljava.lang.String;@1cffeb4
onde ‘mnop’ é a palavra lida no arquivo e ‘[Ljava.lang.String;@1cffeb4’ seria o valor dela na tabela q criei.
Onde está o problema?
Obrigado!

8 Respostas

Anime

Oi,

Não entendi… :roll:

P

É, pensei q tinha ficado meio confuso mesmo, rs.
Vo tentar explicar melhor.

public static void main(String[] args)throws IOException { int tam = 83681; String pal; String[] tab = new String[tam]; monta_tab(tab); Scanner aPal = new Scanner(new FileReader("palavras.pal")); while (aPal.hasNext()){ pal = aPal.next(); if (valida(pal)) { System.out.println(pal+ -> "+tab); } else { System.out.printf("%s -> 0\n", pal) ; } } }

Nessa parte é q eu realizo a impressão do meu programa.
E tá acontecendo o problema nessa parte

System.out.println(pal+ -> "+tab);

Pq o seguinte: eu leio a palavra (pal) do arquivo ‘palavras.pal’
e o meu programa consiste em ler essas palavras e decidir se são válidas.
o total de palavras possíveis válidas fooram criadas aqui:

monta_tab(tab);

e a verificação para ver se as palavras são válidas vem daqui:

if (valida(pal))

Realizando um teste do jeito que tá e lendo a palavra ‘mnop’
essa impressão q saiu:

mnop -> [Ljava.lang.String;@1cffeb4

onde esse ‘[Ljava.lang.String;@1cffeb4’ teria q ser o valor q criei para aquela palavra na tabela.

o problema basicamente é esse…não consigo fazer com que eu obtenha o valor criados em monta_tab(tab) para associar com as palavras q forem válidas.
Vêem alguma solução?

Anime

Então,vamos esperar pra ver se alguém responde…Continua confuso pra mim… :oops:

P

:frowning:
o q não conseguiu entender? tudo? rs

Anime

pedropsantos:
:frowning:
o q não conseguiu entender? tudo? rs

Calma,quando não entendo e vejo que ninguém responde,faço isso para upar o tópico…Quem sabe agora alguém entendeu… :wink:

R

se entendi bem, pal eh a string.. e tab eh a referencia do array... vc ta mandando imprimir a referencia.. experimente:

System.out.println( pal+ -> "+ pal );

Se der errado ou por conselho mesmo, tente ler o arquivo desta maneira

PrintWriter outputStream = null;  
        BufferedReader inputStream = null;  

try {  

        int tam = 83681;     
        String pal;     
        String[] tab = new String[tam];     
        monta_tab(tab);

        inputStream =  new BufferedReader(new FileReader("palavras.pal"));  
  
        String linha;  
        int linhasLidas = 0;  

        while ((linha = inputStream.readLine()) != null ){ 
                
              // considerei que vc tem uma palavra por linha... se nao tiver tem q dar split na linha e verificar as palavras uma a uma
              pal = linha;

              if ( valida( pal ) ) {     
                    System.out.println( pal + -> "+ pal );     
              } else {     
                    System.out.printf("%s -> 0\n", pal ) ;     
              }                          
           }  
        }finally {  
            if (inputStream != null) {  
                inputStream.close();  
        }  
     }  
}
P

O programa funcionou normalmente, só que colocando pal duas vezes ele só repete a palavra na impressão.
Onde eu montei a tabela com o valor de cada palavra foi aqui:

static void monta_tab(String[] tab) { int qtd = 0; for (int i = 0; i < 26; i++) { tab[qtd++] = ""+(char)(i + 97); } for (int i = 0; i < 25; i++) { for (int j = i + 1; j < 26 ; j++) { tab[qtd++] = ""+(char)(i + 97)+(char)(j + 97); } } for (int i = 0; i < 24; i++) { for (int j = i + 1; j < 25 ; j++) { for (int k = j + 1; k < 26; k++) { tab[qtd++] = ""+(char)(i + 97)+(char)(j + 97) +(char)(k + 97); } } } for (int i = 0; i < 23; i++) { for (int j = i + 1; j < 24 ; j++) { for (int k = j + 1; k < 25; k++) { for (int m = k + 1; m < 26; m++) { tab[qtd++] = ""+(char)(i + 97)+(char)(j + 97) +(char)(k + 97)+(char)(m + 97); } } } } for (int i = 0; i < 22; i++) { for (int j = i + 1; j < 23 ; j++) { for (int k = j + 1; k < 24; k++) { for (int m = k + 1; m < 25; m++) { for (int n = m + 1; n < 26; n++) { tab[qtd++] = ""+(char)(i + 97)+(char)(j + 97) +(char)(k + 97)+(char)(m + 97)+(char)(n + 97); } } } } } }

Só que não estou conseguindo buscar o valor nesse método do static void.
o outro método existente é o de verificação, q é static boolean.
No caso, essa tabela fornece o valor…por exemplo:
“a” tá armazenado no tab[0], então na hora de imprimir tenho q buscar esse valor e adicionar 1.
A impressão seria assim:
a -> 1
b -> 2
z -> 26
ab -> 27
e assim sucessivamente.
Será q tem solução?

R

nao entendi muito bem sua pergunta… como assim só repete a palavra na impressão? colocar pal 2x onde?

kra esse metodo ae eh pra colocar as palavras no array?
tenta sempre deixar as coisas simples e se funcionam dae vc pode ir deixando elas mais complexas…

troca a linha
String[] tab = new String[tam];

por
String[] tab = new String[] { “uma”, “duas”, “tres”, “quatro”, “cinco”, “uma” };

dae comenta a linha que chama o metodo monta_tab, coloca algumas dessas palavras no arquivo e tenta achar

Criado 21 de janeiro de 2011
Ultima resposta 22 de jan. de 2011
Respostas 8
Participantes 3