Programa exibe caracter: que mais se repete, menos se repete e total de caracter

5 respostas
rafa.spimenta

Bom pessoa, uma das quetoes do meu trabalho academico é:

3) Faça um programa que leia uma frases e, ao final, indique: (Valor 2 pontos)
a) o caracter que mais se repetiu na frase;
b) o caracter que menos se repetiu na frase;
c) a quantidade de caracteres digitados.

Depois de passar alguns dias quebrando a cabeça consegui desenvolver o codigo abaixo, no entando como voces veram eu só soube fazer usando um char[] e passando como parametro o alfabeto. Outro problema é para imprimir o caracter que menos se repete quando existem valores iguais.
ex: "rafaeL", caracter q menos se repete: "e"... pois o "e" esta na frente do "f", "L" e "r" no alfabeto.

Eu vou entragar meu trabalhor assim ,mas sei que poderia ter sido melhor, usei os conteitos apresentados ate o momento em sala e o forum pra fazer esse trabalho.
Se alguem puder me ajudar a, principalmente nao ter que usar um char de alfabeto.

import java.util.Scanner;

public class Exercicio3
{
	public static int Maior(int[] c)//encontra o maior valor em  um vetor de int
	{
		int max = c[0];
		for(int x=0;x<c.length;x++)
		{
			if (c[x]>max)
			max=c[x];
		}
		return max;
	}
	
	public static int Maior(int[] c, int i)//encontra o maior valor em  um vetor de int
	{
		int max = c[0];
		for(int x=0;x<c.length;x++)
		{
			if (c[x]>max)
			{
				max=c[x];
				i=x;
			}
		}
		return i;
	}
	
	public static int Menor(int[] c)//encontra o menor valor em  um vetor de int
	{
		int min = c[0];
		for(int x=0;x<c.length;x++)
		{
			if ((c[x]<min)&&(c[x]!=0))
				min=c[x];
		}
		return min;
	}
	
	public static int Menor(int[] c, int i)//encontra o menor valor em  um vetor de int
	{
		int min = c[0];
		for(int x=0;x<c.length;x++)
		{
			if ((c[x]<min)&&(c[x]!=0))
			{
				min=c[x];
				i=x;
			}
		}
		return i;
	}
	
	public static void main(String[] args)
	 {
		Scanner input = new Scanner(System.in);
	  
	    int index=0;
	    char[] letra = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','v','x','y','z'}; // ocorrências da letra "a"
	    int[] cont =new int[letra.length];
	    String frase = null;
	    
	    System.out.print("Digite uma frase: ");
	    frase=input.nextLine();
	    
		for(int x=0;x<letra.length;x++)
	    	for(int i = 0; i < frase.length(); i++)
			{
		        if(frase.charAt(i) == letra[x])
		            cont[x]++; 
		    }
    
		index=Maior(cont,index);
	    System.out.println("A frase contem " + 
	    		Maior(cont) + " ocorrencias da letra " + letra[index]);
	    index=Menor(cont,index);
	    
	    System.out.println("A frase contem " + 
	    		Menor(cont) + " ocorrencias da letra " + letra[index]);
	    
	    System.out.println("A frase contem " +frase.length()+" caracteres ");
	    System.exit(0);
	}
}

5 Respostas

T

Eu normalmente resolveria o problema assim (exceto pela entrada de dados, que deixei fixa):

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

/*
3) Faça um programa que leia uma frase e, ao final, indique: (Valor 2 pontos)
a) o caracter que mais se repetiu na frase;
b) o caracter que menos se repetiu na frase;
c) a quantidade de caracteres digitados. 
 */
public class LicaoDeCasa {
	private String frase;
	private Map < Character, Integer> contagemCaracter = new TreeMap<Character, Integer>();
	private SortedMap < Integer,List < Character > > frequencias = new TreeMap<Integer,List < Character > >();
	public void analisar() {
		// Achando as freqüências
		for (char ch : frase.toCharArray()) {
			int freq = 0;
			if (contagemCaracter.containsKey (ch)) {
				freq = contagemCaracter.get (ch);
			}
			contagemCaracter.put(ch, freq + 1);
		}
		// Determinando os mais e menos repetidos
		for (Map.Entry<Character, Integer> entry : contagemCaracter.entrySet()) {
			List<Character> chars = frequencias.get(entry.getValue());
			if (chars == null)
				chars = new ArrayList<Character>();
			chars.add (entry.getKey());
			frequencias.put(entry.getValue(), chars);
		}
	}
	public List<Character> maisRepetidos() {
		return frequencias.get (frequencias.lastKey());
	}
	public List<Character> menosRepetidos() {
		return frequencias.get (frequencias.firstKey());
	}
	public void setFrase (String frase) {
		this.frase = frase;
	}
	public static void main(String[] args) {
		String s = "Hoje Gisele Bundchen apareceu na frente da minha escola";
		LicaoDeCasa ldc = new LicaoDeCasa();
		ldc.setFrase (s.toLowerCase());
		ldc.analisar();
		System.out.println ("Os caracteres que mais se repetiram na frase foram:" + ldc.maisRepetidos());
		System.out.println ("Os caracteres que menos se repetiram na frase foram:" + ldc.menosRepetidos());
		System.out.println ("A quantidade de caracteres digitados foi: " + s.length());
	}
}

Embora você não possa entregar seu trabalho do jeito que fiz (está obviamente fora do escopo da sua matéria), no dia a dia, se aparecesse algum problema parecido com isso, resolveria dessa maneira.

rafa.spimenta

vo tentando executar seu programa aqui mas ta dando um erro nessa linha

private SortedMap < Integer,List < Character >> frequencias = new TreeMap<Integer,List > < Character >>();

rafa.spimenta

ja resolvi, to indo pra aula, anoite eu vejo seu programa, vlw!

B

rafa-projeseg:
vo tentando executar seu programa aqui mas ta dando um erro nessa linha

private SortedMap < Integer,List < Character >> frequencias = new TreeMap<Integer,List > < Character >>();

Tem um > a mais depois do ultimo List

T

Isso é coisa do jforum.net, que às vezes duplica ou inverte os sinais de ">" e "<". . Se você não entendeu como o programa foi feito, não vai conseguir corrigi-lo.

Criado 28 de maio de 2008
Ultima resposta 28 de mai. de 2008
Respostas 5
Participantes 3