Preciso de ajuda em uma questão[RESOLVIDA}

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!

1 curtida

Mostre-nos o que tu já fez.

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

*** 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,"Nº de Vogais: "+(vogA+vogE+vogI+vogO+vogU));
}

}

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…

2 curtidas

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

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.

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.

1 curtida

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

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,"Nº de Vogais: "+(vogA+vogE+vogI+vogO+vogU));
    JOptionPane.showMessageDialog(null,"Nº de Consonates: "+cons);
    JOptionPane.showMessageDialog(null,"Tamanho:"+tamNome);
     
}

}

???

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

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

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?

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

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…

2 curtidas

exatamente isso. muito obrigada!!!

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?

É 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 curtida

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");


  }