Como pegar valores específicos através de hashmap

14 respostas
java
GabiJSampa

Gente, tenho esse código. O que ele faz: ele serve para contar quantos segundos eu demoro pra digitar uma frase, nesse caso, ‘tecnologia’. Porém, como a intenção é imitar um teclado, esse teclado vai bloquear algumas letras que pelo nosso dicionário não tem como ficar juntas, ou melhor, não tem como formar uma palavra. Por exemplo, ao digitar ‘Z’, é super lógico que o teclado tenha que bloquear a letra ‘B’, já que vai ser difícil encontrar uma palavra que depois do ‘Z’ venha o ‘B’.

No caso do código está a palavra ‘TECNOLOGIA’ e esse teclado deveria bloquear algumas teclas para cada letra específica e consequentemente não “passar” por essas letras bloqueadas. Por exemplo: ao digitar a letra ‘T’ deve-se deixar “ativas”, ou melhor, contáveis, apenas as letras: A,C,E,H,I,O,P,R,S,U,V,W. A letra ‘E’: todas as letras devem ficar ativas; A letra ‘C’: deve-se deixar “ativas” apenas as letras: A,C,E,F, H,I,K,L,M,N,O,S,T,U; A letra ‘N’: deve-se deixar “ativas” apenas as letras:A,E,I,O; A letra ‘O’: deve-se deixar “ativas” apenas as letras:C,O,L,P,R; A letra ‘L’: deve-se deixar “ativas” apenas as letras:O; A letra ‘O’: deve-se deixar “ativas” apenas as letras:G; A letra ‘G’: deve-se deixar “ativas” apenas as letras:I; A letra ‘I’: deve-se deixar “ativas” apenas as letras:A;

Eu gostaria de saber como pode ser implementado ou se é possível implementar, se é possível fazer essa contagem!?

import java.util.HashMap;

public class ContagemAutoComplete {

public static void main(String[] args) {
HashMap<String, Integer> hashLetras=new HashMap<String, Integer>();

hashLetras.put("A", 2); hashLetras.put("B", 3); hashLetras.put("C", 4); hashLetras.put("D", 5); hashLetras.put("E", 3);

hashLetras.put("F", 4); hashLetras.put("G", 5); hashLetras.put("H", 6); hashLetras.put("I", 4); hashLetras.put("J", 5);

hashLetras.put("K", 6); hashLetras.put("L", 7); hashLetras.put("M", 8); hashLetras.put("N", 9); hashLetras.put("O", 5);

hashLetras.put("P", 6); hashLetras.put("Q", 7); hashLetras.put("R", 8); hashLetras.put("S", 9); hashLetras.put("T", 10); 

hashLetras.put("U", 6); hashLetras.put("V", 7); hashLetras.put("W", 8); hashLetras.put("X", 9); hashLetras.put("Y", 10);

hashLetras.put("Z", 11); hashLetras.put(" ", 7); //ESPACO

String teste="TECNOLOGIA";

int count=0;

for(int i=0; i<teste.length();i++){

    if( i<(teste.length()-1) && teste.charAt(i)=='Q' && teste.charAt(i+1)=='U'){
         count = count+7;
         i++;
    }else{
        String c = teste.charAt(i)+ "";
        System.out.println("LETRA:"+ c);
        count = count+hashLetras.get(c);
        System.out.println("NUMERO DA LETRA:"+ hashLetras.get(c));
    }
}

System.out.println("O tempo foi de: "+count);
}
}

14 Respostas

darlan_machado

Até onde eu entendi, isso é um simulador de autocomplete, isso?
Se é, então a implementação mais simples se dá através do cadastro de palavras e da busca pelo que está sendo digitado.
Exemplo:

TECNOLOGIA
TÉCNICO
TÉCNICA
TECNÓLOGO
TECHNO
TECLADO
TECLADISTA
TERAPIA
TILÁPIA
TENISTA
TATUAGEM
TOMBO

Quando você digita “T”, todas as palavras são exibidas.
Quando insere “TE”, todas as palavras iniciadas em “TE” são exibidas. E assim por diante.
Até que você escolha a palavra.

Se não for isso, creio que precisa informar de modo mais claro o que pretende fazer.

GabiJSampa

é isso sim, só que nesse caso ele tem que contar quanto tempo demorou para digitar cada palavra com o auto complete

darlan_machado
LocalDateTime ini = LocalDateTime.now();
//Faz o que precisa fazer
LocalDateTime fim = LocalDateTime.now();

Aí você pega a diferença entre os dois…

GabiJSampa

Não entendi como faz para não contar as letras que ficaram bloqueadas

darlan_machado

Você precisa contar as letras ou o tempo?

GabiJSampa

preciso contar o tempo para digitar cada letra

darlan_machado

Existem alguns meios para conseguir obter essa informação, dependendo de qual, fica mais ou menos fácil.
Tempo específico ou média?
No tempo específico, você precisa identificar o momento entre a tecla ser pressionada e o caractere lido. Na média, conta o tempo de todas, soma e divide pelo total de caracteres, o que é bem mais fácil.

GabiJSampa

Mas como o código vai entender quando ele deve parar de contar o valor para acessra cada letra (por que existe o autocomplete)?
image

darlan_machado

Desenvolver um sistema é colocar várias partes (pequenos algoritmos isolados) em funcionamento uns com os outros.
É possível resolver todos os problemas em conjunto? Sim. Mas, nem sempre é a solução ideal.
Eu criaria um método para iniciar a contagem do tempo e outro para parar essa contagem.
Então, criaria um método que processasse a questão do autocomplete e quando não houver mais opções para completar, pararia a execução do contador.
É um dos caminhos para resolver o problema.

GabiJSampa

Mas é porque não é o algoritmo que vai entender o autocomplete, sou eu que vou inserir as entradas, para cada letra, na mão mesmo, como no exemplo da palavra tecnologia

darlan_machado

E como você pretende fazer para dizer ao java que terminou de digitar as letras que queria? Sem definir isso, não tem como pegar o final da execução.

GabiJSampa

pretendo inserir. por exemplo, nesse teclado que eu tou digitando, ele autocompleta a palavra tecnologia na terceira letra, então eu iria informar as letras que foram bloqueadas e o momento de parar, pq a palavra a partir da terceira letra se autocopleta. Mas como implementar não tou sabendo

staroski

Ainda não entendi onde que entra o tempo nessa parada toda…
Quando e porque você precisa informar as letras bloqueadas?
Você precisa saber o tempo de parar o quê exatamente?
Tente explicar de forma mais clara e objetiva o que você precisa fazer.

GabiJSampa

eu estou estudando um app de digitação (esse que eu mostrei na foto) e eu tenho que saber quanto tempo demora para alcançar cada letra no app, porém o app tem o auto completar e também bloqueia certas letras para minimizar o tempo do usuário (é um app destinado para ser usado com o piscar dos olhos por pessoas com deficiência), então o objetivo é ver se o app que eu vou propor tem ganho de tempo em relação a esse que eu estou estudando. E eu só consigo saber o ganho de tempo se eu calcular quanto tempo leva para se digitar uma palavra ou frase, com todos os bloqueios do app e autocomplete. Deu pra entender melhor?

Criado 3 de abril de 2019
Ultima resposta 3 de abr. de 2019
Respostas 14
Participantes 3