Métodos em uma classe Java

20 respostas Resolvido
programaçãojava
V

Minha questão pede criar uma classe que recebe um nome gerado pelo usuário no terminal e seja capaz utilizar métodos capazes de manipular o nome informado e realizar operações sobre ele.
A primeira é para retornar o primeiro caractere de todos os nomes informados em letra maiuscula.
O segundo é para retornar o primeiro nome e o ultimo sobrenome do usuário por exemplo: josé luis silva. Saída = josé SIlva
Terceiro, um método que retorne só as iniciais do nome.
Quarto, um método tudoMinusculo, que coloque todos os caracteres da string e
m minúsculo (caixa baixa).
Quinto, um método que retorne o tamanho, em número de caracteres, da string a
rmazenada.
Sexto, um método que conte o número de ocorrências de um determinado caracter recebido como parâmetro.

Comecei a fazer o código e pesquisar, tudo bem. Só que depois de pronto só funcionam os dois primeiros métodos. Não acusa o erro no eclipse, mas se seleciono qualquer opção fora a 1 e a 2 o código da erro e não executa o comando.

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		System.out.println("Informe um nome: ");
		String nome = input.nextLine();
		
		System.out.println("Opcoes: \n"
						 + "1 - Primeira Maiuscula\n"
						 + "2 - Primeiro e último nome\n"
						 + "3 - Iniciais\n"
						 + "4 - Passar as letras para minusculo\n"
						 + "5 - Numero de caracteres\n"
						 + "6 - Ocorrencia de uma determinada letra\n");
		int opcao = input.nextInt();
		
		switch (opcao) {
		case 1:
		String Maiuscula = iniMaiuscula(nome); 
			System.out.println(iniMaiuscula(nome));
			break;
			
		case 2: 
			String primeiroUltimo = primeiroEultimo(nome); 
			System.out.println(primeiroEultimo(nome));
		    
			break;
		case 3:
			String Inicial = iniciais(nome);
			System.out.println("Iniciais: " +iniciais(nome));
			
			break;
			
		case 4: 
			String Minuscula = minuscula(nome);
			System.out.println(minuscula(nome));
			
			break;
		
		case 5: 
			String numCaracteres = caracteres(nome);
    System.out.println(caracteres(nome));

    break;
			
			
		case 6:
			String ocorrenciaCar = ocorrencia(nome);
			System.out.println(ocorrencia(nome));

    break;
		default:
			break;
		}
		
	}
  	//Questão a
	public static String iniMaiuscula(String value) {
		String result = "";
		String[] nomes = value.split(" ");
		for(String palavra : nomes){
			result = result + " " + palavra.replaceFirst(palavra.substring(0, 1), palavra.substring(0, 1).toUpperCase());
		}
		return result.trim();
	}
	//questão b
public static String primeiroEultimo(String value){
  String[] prenomes = value.split(" ");
  return prenomes[0] + " " + prenomes [prenomes.length -1];
}

	//Questão c
	public static String iniciais(String value) {
	    String primeiraLetraNomeSobrenome = "";
	    String nome = null;
		for (char letra : nome.toCharArray()) {
	        if (Character.isUpperCase(letra)) {
	            primeiraLetraNomeSobrenome += letra;
	        }
	    }
		return nome;
		}
	//Questão d
	public static String minuscula(String value){
	      String palavra = null;
	      palavra.toLowerCase(); 
	      System.out.println(palavra.toLowerCase());
		return palavra; 
	   
	}
	
	//Questão e
	public static String caracteres (String value) {
        String str = null;
		String frs = str;
        int vog = 0, cons = 0;
        str= str.toLowerCase();
        for(int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            if(c == 32) continue;
            if(c == 97 | c == 101 | c == 105 | c == 111 | c == 117){
                vog++;
                continue;
            }
            if(c >= 98 && c <= 122) cons++;
        }
        System.out.println("Na frase \""+frs+"\" temos:\nVogais: "+vog+"\nConsoantes: "+cons);
		return frs;
        
    }
	
	//questão f
	public static String ocorrencia (String value) {
		int total=0;
		String x = null;
		for (int i=0;i<=x.length()-1;i++) {
			if (x.substring(i,i+1).equalsIgnoreCase("o"))
				total=total+1;
		}
		System.out.println(total);
		return x;
	}

}

Alguém pode me dizer o que está errado? Sei que deve ter bastante coisa, mas ainda sou muito leigo em Java.

20 Respostas

D
Solucao aceita

Por que você não quebra a String em vários nomes e pega só o primeiro de cada?

String[] nomes = value.split(" ");
for(String nome : nomes) {
    primeiraLetraNomeSobrenome += nome.charAt(0);
}

Outro ponto, no teu método você retorna nome, embora você sequer coloque qualquer valor nele no código.

O toLowerCase, assim como vários método da String retornam a String em minúsculo, você precisa pegar o retorno deste método para surtir efeito na String em questão. Isso ocorre por que a String é imutável.

palavra = palavra.toLowerCase();

Você inverteu os itens quinto e sexto e nenhum deles está legal.
Para retornar o tamanho de uma String, basta invocar o método length

"ABCDE".length(); //retornará 5

Já a ocorrência de caracteres em uma String, você pode, simplesmente, quebrar com split e contar o tamanho do array, removendo 1:

String x = "sfdfgdgdfhfghghghjgh";
String[] y = x.split("d");
System.out.println(y.length - 1); //retorna 3
P

se charAt retorna um char que, essencialmente, é um inteiro de 8 bits, eu nao vejo como isso vai dar certo. eu pensaria em fazer um nome.substring(0,1)

mas posso estar falando bobagem

D

Roda sim. Basicamente, isso é o mesmo que

primeiraLetraNomeSobrenome = primeiraLetraNomeSobrenome + 1;

Ou

primeiraLetraNomeSobrenome = primeiraLetraNomeSobrenome + 'a';
V

Tentei fazer assim mas acusou esse erro: exit status 1
Main.java:80: error: cannot find symbol
primeiraLetraNomeSobrenome += nome.charAt(0);
^
symbol: variable primeiraLetraNomeSobrenome
location: class Main
1 error

Não entendo muito bem.

D

Isso significa que você não declarou a variável em questão.
O que eu coloquei são trechos a serem utilizados.

V
nesse caso a quinta ficaria assim ou tem que acrescentar mais alguma coisa?

public static String caracteres (String value) {

String[] caractere =  value.length();
V

Ah sim, vou continuar vendo lá;

V

Consegui arrumar! Agora a opção três executa direitinho.

D

Não precisa complicar.
Você tem que devolver o tamanho, em número de caracteres. Ou seja, quantos caracteres aquela String possui. Logo, entendo eu, retorna isso

return value.length();
V
Eu fiz assim, para pegar o nome que  é inserido no programa para verificar:

public static String ocorrencia (String value) {

String x = " ";

String[] y = value.split(d);

System.out.println(y.length - 1);

return x;

Só que aí quando executo , digamos que tenham duas letras “d” no nome, retorna: 2 dois, um em cima do outro, ao invés de só um 2. Porque?

E se eu quiser colocar pro usuário inserir a letra, como faço?

D

Cara, esse foi só um exemplo do uso do método split.

V

Eu sei, mas tentei usar para deixar o método menor. Vou tentar outra coisa.

D

Olha, a sugestão que dei é uma opção e você pode escolher qual achar melhor, mas, esta funciona.

V

Resolvi usar aquela mesma, mas to com um problema naquela para contar caractere. Tentei fazer como você disse mas não consegui assimilar. Tentei isso:

public static String caracteres (String value) {

String caractere = " ";

caractere = value.length();

return caractere;

}

mas dá esse erro:
exit status 1
Main.java:98: error: incompatible types: int cannot be converted to String
caractere = value.length();
^
1 error

Não sei como arrumar. É a última que falta

D

Está falando de qual das questões? Pois você misturou tudo aí.

V

A de contar as strings. Tentei fazer como falei acima, mas dá esse erro. Foi mal, é o cansaço.

D

Cansaço não é desculpa.
Se está falando dessa

Não tem que inventar

public static int tamanho(String armazenada) {
    return armazenada.length();
}

Se está falando dessa

Aí a coisa muda um pouco

V

Essa já fiz, era a outra mesmo, de contar os caracteres. Tava trocado. Vou ver se ajeito com o que você disse. Sempre da erro no case. int cannot be converted to String.

D

Você está esperando uma String, não um int. Mas a contagem de caracteres retorna um int

V

Ah sim, era isso. Erro meu.
Aprendi bastante. Valeu pela ajuda, tenha uma boa noite.

Criado 12 de setembro de 2018
Ultima resposta 13 de set. de 2018
Respostas 20
Participantes 3