panox 0 Denunciar post Postado Janeiro 23, 2010 Olá a todos, tudo bom ? Eu estou cursando os módulos de Java SE na Impacta Tecnologia e ontem o professor passou alguns exercícios de fixação e estou tendo problema no ultimo deles, gostaria de saber se vocês saberiam me dizer aonde estou errando nesta rotina. Eu tenho uma String com uma palavra ou frase qualquer, a partir desta String, eu tenho que dizer quantas vezes cada letra apareceu nessa frase, em no máximo 10 linhas ( ja construi o método de um modo mais extenso sem o uso de arrays, e usando switch/case - 100 linhas ) e esta é a rotina que estou tentando fazer, mas estou travando na hora de contar cada letra e criar um array de int para conta-las. public class ContagemAlfabeto { public static void main(String[] args){ String nome = "IMPACTA TECNOLOGIA ELETRONICA"; for(int a = 0; a < nome.length(); a++){ char[] letra = new char[]{nome.charAt(a)}; for(int i : letra){ /* * Comparação * Incremento * output de do resultado de cada letra */ } } } } Ficaria feliz se alguém pudesse me ajudar a entender o funcionamento desta rotina. Obrigado desde já. Abraços ! Compartilhar este post Link para o post Compartilhar em outros sites
Giovanni Ritchie 0 Denunciar post Postado Janeiro 23, 2010 Meio ineficiente... mas estou mesmo com pressa http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Tenta se basear nele e dá as melhoradas possiveis String nome = "IMPACTA TECNOLOGIA"; int[] cont = new int[nome.length()]; for (int i = 0; i < nome.length(); ++i) { cont[i] = 0; for (int j = 0; j < nome.length(); j++) { if (nome.charAt(i) == nome.charAt(j)) { ++cont[i]; } } System.out.printf("%c-%d\n", nome.charAt(i), cont[i]); } Compartilhar este post Link para o post Compartilhar em outros sites
panox 0 Denunciar post Postado Janeiro 24, 2010 Muito Obrigado, entendi o que você fez, a única coisa que estou tentando fazer é retirar a duplicidade dele, passando o resultado final para um TreeSet, mas não estou conseguindo fazer nada, segue o meu codigo : import java.util.*; public class Contagem { public static void main(String[] args) { String nome = "IMPACTA TECNOLOGIA ELETRONICA"; int[] cont = new int[nome.length()]; TreeSet contagem = new TreeSet(); for (int pos = 0; pos < nome.length(); pos++) { cont[pos] = 0; char[] dados = new char[]{contagem.add(nome.charAt(pos)).toArray()}; for (int a = 0; a < nome.length(); a++) { if (nome.charAt(pos) == nome.charAt(a)) { cont[pos]++; } } System.out.println("A letra " + dados + " Aparece " + cont[pos] + " vezes."); } } } Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Giovanni Ritchie 0 Denunciar post Postado Janeiro 24, 2010 Dá uma olhada nessa solução... concerteza há alguma solução mais elegante e menos gambiarra... mas funciona Se conseguir melhora-la poste aqui tbm... String name = "IMPACTA TECNOLOGIA"; char[] chars = name.toCharArray(); int cont = 0; int[] count = new int[chars.length]; for (int i = 0; i < chars.length - 1; i++) { count[i] = 1; for (int j = i + 1; j < chars.length; j++) { if (chars[j] != ' ' && chars[i] != ' ') { if ((chars[i] == chars[j])) { count[i]++; chars[j] = ' '; cont++; reajusta(chars, j); } } } } for (int i = 0; i < chars.length - cont; i++) { System.out.printf("%c-%d\n", chars[i], count[i]); } } static void reajusta(char[] array, int pos) { for (int i = pos; i < array.length - 1; i++) { char aux = array[i + 1]; array[i + 1] = array[i]; array[i] = aux; } } http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites