Preciso de ajuda em uma questão[RESOLVIDA}

25 respostas
M

olá, sou iniciante em java e preciso de ajuda em uma questão de um lista de exercícios.
preciso criar uma classe que leia um nome, informe quantas vogais esse nome
possui, quantas consoantes e qual o tamanho desse nome. vi algumas respostas à questões parecidas, mas não consegui usar para o meu contexto. se alguém puder me ajudar, ficarei grata!

25 Respostas

Jothar_Aleksander

Mostre-nos o que tu já fez.

M

consegui fazer com que conte as vogais e as consoantes, como faço para contar e imprimir a quantidade de letra no geral?

M

*** não deu certo p consoante

package vog;
import javax.swing.JOptionPane;

public class Vog {

public static void main(String[] args) {
    String txt;
    int i;
    int vogA = 0, vogE = 0, vogI = 0, vogO = 0, vogU = 0;
    
    txt = JOptionPane.showInputDialog("Digite um nome: ");
    
    for(i=0;i<txt.length();i++){
        if(txt.charAt(i)=='a'||txt.charAt(i)=='A'){
           vogA++;
        }
        if(txt.charAt(i)=='e'||txt.charAt(i)=='E'){
           vogE++;
        }
        if(txt.charAt(i)=='i'||txt.charAt(i)=='I'){
           vogI++;
        }
        if(txt.charAt(i)=='o'||txt.charAt(i)=='O'){
           vogO++;
        }
        if(txt.charAt(i)=='u'||txt.charAt(i)=='U'){
           vogU++;
        }
    }
    
    JOptionPane.showMessageDialog(null,"Nome: "+txt);
    JOptionPane.showMessageDialog(null," de Vogais: "+(vogA+vogE+vogI+vogO+vogU));
}

}

Jothar_Aleksander

Uma de várias formas de resolver:

import java.util.Scanner;

public class VerificarNome {
	public static void main(String[] args){
		Scanner leitor = new Scanner(System.in);
		short tamanhoNome = 0;
		short vogal = 0;
		short consoante = 0;
		short espaco = 0;
		char[] vogais = {
			'a', 'â', 'ã', 'á', 'à', 'A', 'Â', 'Ã', 'Á', 'À', 
			'e', 'ê', 'é', 'è', 'E', 'Ê', 'É', 'È', 
			'i', 'í', 'ì', 'I', 'Í', 'Ì', 
			'o', 'ô', 'õ', 'ó', 'ò', 'O', 'Ô', 'Õ', 'Ó', 'Ò',
			'u', 'ú', 'ù', 'U', 'Ú', 'Ù'};
		
		String nome;
		
		System.out.print("\nInforme o nome: ");
		nome = leitor.nextLine();
		
		tamanhoNome = (short) nome.length();
		
		for(short letra = 0; letra < tamanhoNome; letra++){
			for(short posicao = 0; posicao < vogais.length; posicao++){
				if(nome.charAt(letra) == vogais[posicao])
					vogal++;
			}
			
			if(nome.charAt(letra) == ' ')
				espaco++;
		}
		
		System.out.println("\nVogais: " + vogal);
		System.out.println("Consoantes: " + (tamanhoNome - vogal - espaco));
		System.out.println("Tamanho do nome (só letras): " + (tamanhoNome - espaco));
		System.out.println("Tamanho do nome (bruto): " + tamanhoNome + "\n");
	}
}

Rodando…

M

muito obrigada! vou pesquisar sobre o short, não entendi como funciona

Jothar_Aleksander

São os tipos de dados do Java, veja: Tipos de Dados do Java. Resumindo, é um tipo de dado primitivo que corresponde a metade de um int, ou seja, enquanto o int tem 32 bits, o short tem 16. Como são valores pequenos para que usar 32 bits? É só por isso que utilizei o short.

Jothar_Aleksander

Lembrando que esse código tem problemas que você deve resolver, como por exemplo, se for digitado símbolos especiais e número no nome, vai contar tudo como consoante, o que não é verdade. Logo, tens que melhorá-lo.

M

eu adaptei o que tem no seu ao meu, ficou mais simples, mas de uma forma que eu saiba explicar ao professor. muito obrigada !!!

M

pode ajudar novamente? meu professor quer que passe para uma classe, como faço isso, presico usar get e set.

package vog;
import javax.swing.JOptionPane;

public class Vog {

public static void main(String[] args) {
    String txt;
    int i;
    int vogA = 0, vogE = 0, vogI = 0, vogO = 0, vogU = 0;
    int cons, vog;
    short tamNome;
    
    txt = JOptionPane.showInputDialog("Digite um nome: ");
    tamNome = (short)txt.length();
    for(i=0;i<txt.length();i++){
        
        if(txt.charAt(i)=='a'||txt.charAt(i)=='A'){
           vogA++;
        }
        if(txt.charAt(i)=='e'||txt.charAt(i)=='E'){
           vogE++;
        }
        if(txt.charAt(i)=='i'||txt.charAt(i)=='I'){
           vogI++;
        }
        if(txt.charAt(i)=='o'||txt.charAt(i)=='O'){
           vogO++;
        }
        if(txt.charAt(i)=='u'||txt.charAt(i)=='U'){
           vogU++;
        }
    }
    vog = (vogA+vogE+vogI+vogO+vogU);
    cons = tamNome-vog;
    
    JOptionPane.showMessageDialog(null,"Nome: "+txt);
    JOptionPane.showMessageDialog(null," de Vogais: "+(vogA+vogE+vogI+vogO+vogU));
    JOptionPane.showMessageDialog(null," de Consonates: "+cons);
    JOptionPane.showMessageDialog(null,"Tamanho:"+tamNome);
     
}

}

Jothar_Aleksander

???

M

não sei como passar esses comandos para uma classe, criar o método e chamar na classe principal

Jothar_Aleksander

Continuo sem entender. O que você tem que passar para uma classe? Qual é a sua dificuldade? O que é “comando”? Quais “comandos”?

M

eu preciso criar uma classe que opere a contagem de vogais, consoantes e o número de letras, no caso métodos, esses métodos serão importados para a classe principal, deu pra entender?

R

Na verdade ele quer que você faz orientação ao objetos, não é isso ?

Jothar_Aleksander

Eu creio que quando disse ‘importar’, queria dizer utilizar uma classe em outra, ou melhor um objeto da classe A em uma classe B:

public class VerificaLetra {
	private int numeroVogais = 0;
	private int numeroConsoantes = 0;
	private int tamanhoNome = 0;
	private char[] vogais = new char[44];
	private char[] consoantes = new char[42];
	
	public VerificaLetra(){
		setVogais();
		setConsoantes();
	}
	
	/*
	* Métodos acessores e modificadores
	*/
	public void setNumeroVogais(int numeroVogais){
		this.numeroVogais = numeroVogais;
	}
	
	public int getNumeroVogais(){
		return numeroVogais;
	}
	
	public void setNumeroConsoantes(int numeroConsoantes){
		this.numeroConsoantes = numeroConsoantes;
	}
	
	public int getNumeroConsoantes(){
		return numeroConsoantes;
	}
	
	public void setTamanhoNome(int tamanhoNome){
		this.tamanhoNome = tamanhoNome;
	}
	
	public int getTamanhoNome(){
		return tamanhoNome;
	}
	
	private void setVogais(){
		char[] listaVogais = {
			'a', 'á', 'à', 'ã', 'â', 'A', 'Á', 'À', 'Ã', 'Â',
			'e', 'é', 'è', 'ê', 'E', 'É', 'È', 'Ê',
			'i', 'í', 'ì', 'I', 'Í', 'Ì',
			'o', 'ó', 'ò', 'õ', 'ô', 'O', 'Ó', 'Ò', 'Õ', 'Ô',
			'u', 'ú', 'ù', 'ü', 'U', 'Ú', 'Ù', 'Ü',
			'y', 'Y'
		};
		
		for(short i = 0; i < listaVogais.length; i++){
			vogais[i] = listaVogais[i];
		}
	}
	
	public char[] getVogais(){
		return vogais;
	}
	
	private void setConsoantes(){
		char[] listConsoantes = {
			'b', 'B', 'c', 'C', 'ç', 'Ç', 
			'd', 'D', 'f', 'F', 'g', 'G',
			'h', 'H', 'j', 'J', 'k', 'K', 
			'l', 'L', 'm', 'M', 'n', 'N',
			'p', 'P', 'q', 'Q', 'r', 'R', 
			's', 'S', 't', 'T', 'v', 'V',
			'x', 'X', 'z', 'Z', 'w', 'W',
		};
		
		for(short i = 0; i < listConsoantes.length; i++){
			consoantes[i] = listConsoantes[i];
		}
	}
	
	public char[] getConsoantes(){
		return consoantes;
	}
	
	/*
	* Método de verificação
	*/
	public void analisarNome(String nome){
		short tamanhoTexto = (short) nome.length();
		setTamanhoNome(tamanhoTexto);
		
		if(validarTexto(nome)){
			/*
			* Verifica a quantidade de vogais
			*/
			for(short letra = 0; letra < tamanhoTexto; letra++){
				for(short posicao = 0; posicao < vogais.length; posicao++){
					if(nome.charAt(letra) == getVogais()[posicao])
						setNumeroVogais(getNumeroVogais() + 1);
				}
			}
			
			
			/*
			* Verifica a quantidade de consoantes
			*/
			for(short letra = 0; letra < tamanhoTexto; letra++){
				for(short posicao = 0; posicao < consoantes.length; posicao++){
					if(nome.charAt(letra) == getConsoantes()[posicao])
						setNumeroConsoantes(getNumeroConsoantes() + 1);
				}
			}
		}else
			System.out.println("\nO nome informado não é válido!");
		
	}
	
	private boolean validarTexto(String texto){
		boolean letra = true;
		
		for(short i = 0; i < texto.length(); i++){
			letra = Character.isLetter(texto.charAt(i));
		}
		return letra;
	}
}

import java.util.Scanner;

public class Principal {
	public static void main(String[] args){
		Scanner leitor = new Scanner(System.in);
		VerificaLetra verificaLetra = new VerificaLetra();
		
		System.out.print("Informe o nome: ");
		verificaLetra.analisarNome(leitor.nextLine());
		
		System.out.println("Tamanho do nome: " + verificaLetra.getTamanhoNome());
		System.out.println("Número de vogais: " + verificaLetra.getNumeroVogais());
		System.out.println("Número de consoantes: " + verificaLetra.getNumeroConsoantes());
	}
}

Rodando…

M

exatamente isso. muito obrigada!!!

1

O que é melhor:
a) fazer em case b) fazer em array. c) usar if e else?

Qual desses casos é o melhor ou mais recomendado, viável, bom?

Jothar_Aleksander

É sobre o exercício? Se for, a resposta está na resolução do exercício. Nesse caso, eu julguei que seria melhor se fosse dessa forma. Mas um resposta mais abrangente: depende. Eu geralmente uso case para situações que envolvem alternativas na forma de menu, mas podem acontecer situações fora dessas em que se apresente como a melhor alternativa. If...else sempre são usados, então não há resposta adequada para essa pergunta. No entanto utilizar um número elevado de if...else me incomoda, tenho a impressão de que o código está ‘sujo’. A alternativa melhor, a meu ver sempre é um array ou lista, porque o código fica mais ‘limpo’ (quando dá para ser usado), mas como eu disse: depende!

1

Pode ser feito deste modo ?

switch (valor) {

  case 1: "'a','â','ã','á','à','A','Â','Ã','Á','À'" 
       System.out.println ("vogais");
       break;

  case 2: "'e', 'ê', 'é', 'è', 'E', 'Ê', 'É', 'È'" 
       System.out.println ("vogais");
       break;

  case 3: "'i', 'í', 'ì', 'I', 'Í', 'Ì'"
       System.out.println ("vogais");
       break;

  case 4: "'o', 'ô', 'õ', 'ó', 'ò', 'O', 'Ô', 'Õ', 'Ó', 'Ò'"
       System.out.println ("vogais");
       break;

  case 5: "'u', 'ú', 'ù', 'U', 'Ú', 'Ù'"
       System.out.println ("vogais");
       break;

  default:
       System.out.println ("O valor da variavel não é consoante, nenhum dos anteriores");


  }
1

É possível chamar um array dentro de um case? Para a solução anterior observei essa resposta Método CASE

Jothar_Aleksander

Bom, eu não usei dessa forma, então creio que eu tenha respondido a pergunta. Mas como disse há vários posts atrás: há várias formas de resolver. Você testou? Funciona? Ficou elegante? O código ficou limpo? Resolveu o seu problema?

Jothar_Aleksander

Que eu saiba, os valores para os cases devem ser dados constantes/estáticos, ou seja, devem ser informados em tempo de compilação. Como arrays são resolvidos em tempo de execução (quando o laço itera), então não podem ser usados arrays. Mas faça um teste em uma IDE, creio que ela irá gerar um aviso (erro) sobre isso.

A instrução de seleção múltipla switch realiza ações diferentes com base nos possíveis valores de uma expressão integral constante do tipo byte, short, int ou char, podendo admitir String e enumerações.

Fonte: Java Como Programar 8, pág. 129.

R

Tente assim. Vale dar uma lida em expressões regulares
// Tamanho da frase
System.out.println("Tamanho palavra: " + entrada.length());

// Espaço em branco não é letra. O \W limpar os não letras
System.out.println(“Total caracteres: " + entrada.replaceAll(”\W", “”).length());

// Remove tudo que não for vogal
System.out.println(“Total consoantes: " + entrada.replaceAll(”[^aeiou]", “”).length());

iNosuKe

O “==” compara (no caso das Strings) o endereço de memória qual foi alocado para aquela String, por decorrência do famoso pool de Strings, o uso do “==” para a comparação de Strings não é recomendado. Por isso, o certo ao fazermos a comparação de Strings é usar um dos métodos da classe String, o “equals()”.

pmlm

Reativar um topico dois anos depois para dizer algo que não se aplica?
Neste tópico o == é usado (corretamente) para comparar char, não String.

String a = "Uma string";
String b = "Uma" + " string";

if (a == b) { // false, apesar do mesmo conteudo, as strings são diferentes
(...)

Mas…

char a = 'x';
char b = 'w' + 1;

if (a == b) {   // true, ambos tem o character x (ascii 0x78)
(...)
Criado 6 de outubro de 2019
Ultima resposta 17 de out. de 2022
Respostas 25
Participantes 7