Erro no programa que conta vogais

Boa noite pessoal! Estou travado com um programa que estou tentando fazer, dele tem que receber uma frase e depois informe quantas vogais existem na frase. Só que está dando erro na parte do for(x <= tam), acredito que se isso for ajeitado os outros erros desaparecem. Ali ele diz que o não a uma declaração.

   int tam, x;
   int ca = 0, ce = 0, ci = 0, co = 0, cu = 0;
   char nome = 100;
   tam = Entrada.leiaInt("Digite uma frase!");
      
      for (x = 1, x <= tam - 1, x++)
      {
           if (nome.charAt(x) == 'A' || nome.charAt(x) == 'a')
           {
             ca++;
           }
           else
           {
              if( nome.charAt(x) == 'E' || nome.charAt(x) == 'e')
              {
                ce++;
              }
              else
              {                    
                if (nome.charAt(x) == 'I' || nome.charAt(x) == 'i')
                {
                  ci++;
                }
                else
                {
                  if (nome.charAt(x) == 'O' || nome.charAt(x) == 'o')
                  {
                     co++;
                  }
                  else
                  {
                    if (nome.charAt(x) == 'U' || nome.charAt(x) == 'u')
                    {
                      cu++;
                    }
                    System.out.println( ca+" vogais A existentes!");
                    System.out.println( ce+" vogais E existentes!");
                    System.out.println( ci+" vogais I existentes!");
                    System.out.println( co+" vogais O existentes!");
                    System.out.println( cu+" vogais U existentes!");
                  }
                }
              }
           }
      }
 }

}

Alguma ideia de como posso arruma-los?

O correto para o for é utilizar ;
Portanto troque para
for (x = 1; x <= tam - 1; x++)

Strings são, essencialmente, um array de caracteres.

String frase = "O sapo sabia que o sabiá não sabia assoviar";

Assim sendo, o primeiro elemento (caractere) sempre estará na posição 0
No caso acima, o primeiro caractere é a letra ‘O’ e pode ser obtido através de

nome.charAt(0);

Você tem um for iniciado na primeira posição

for (x = 1, x <= tam - 1, x++)

Eu faria

for(x = 0; x < tam; x++)

Como você não disse qual era o erro, não tenho como ajudar de maneira mais assertiva.

Arrumei nesta parte e parou o erro nesta linha ali, mas em compensação apareceu outros no decorrer do programa (char cannot be dereferenced) em todos nome.charAt!

Você está tentando armazenar uma frase dentro de um char que, por sua vez, não tem o método charAt, afinal é um tipo primitivo. Troque “char nome” por “String nome” que o problema será resolvido :smiley:

Tem alguns erros no seu for, está usando , em vez de ;
Eu alterei tudo que é necessário nesse código

int tam, x; int ca = 0, ce = 0, ci = 0, co = 0, cu = 0; String nome; tam = Entrada.leiaInt("Digite uma frase!");

  for (x = 1; x <= tam - 1; x++)
  {
       if (nome.charAt(x) == 'A' || nome.charAt(x) == 'a')
       {
         ca++;
       }
       else
       {
          if( nome.charAt(x) == 'E' || nome.charAt(x) == 'e')
          {
            ce++;
          }
          else
          {                    
            if (nome.charAt(x) == 'I' || nome.charAt(x) == 'i')
            {
              ci++;
            }
            else
            {
              if (nome.charAt(x) == 'O' || nome.charAt(x) == 'o')
              {
                 co++;
              }
              else
              {
                if (nome.charAt(x) == 'U' || nome.charAt(x) == 'u')
                {
                  cu++;
                }
                System.out.println( ca+" vogais A existentes!");
                System.out.println( ce+" vogais E existentes!");
                System.out.println( ci+" vogais I existentes!");
                System.out.println( co+" vogais O existentes!");
                System.out.println( cu+" vogais U existentes!");
              }
            }
          }
       }
  }

Executei ele, mas ele mostra erro na entra, não entendo como!

tam = Entrada.leiaInt(“Digite uma frase!”);

Eu não estou entendendo de onde você está utilizando esse Entrada.leiaInt, é algum método na sua classe?

O que acontece é que o @Elias_Farias está seguindo um tutorial, aula ou algo assim e criou uma classe que leia os dados, provavelmente com Scanner, e devolva as informações que ele precisa.
Seria bom se ele postasse essa classe “Entrada” para vermos como está sendo feita a leitura do stream.

é mais ou menos isso @Luis_Augusto_Santos, só que não estou utilizando um metodo scanner, estou naquele metodo q vc entra com uma variavel e armazena o valor nela, só que não está me obtendo resultado! E se pelo scanner for diferente, me ensinem por favor porque não entendo muito essa classe ainda!
Não sei se tem algo a ver com o Drjava!

Para utilizar o Scanner basta você importar ela, import java.util.Scanner;

E depois instanciar um objeto da mesma no inicio do código do main.
Scanner entrada = new Scanner(System.in);

Blz, importei o scanner, só que na parte do for, onde tem tam - 1, ele diz que o tipo de operador é incorreto para operador binário!

Cara, pare com isso.
Acessa o site da caelum e baixa a apostila de java iniciante de lá e resolve o problema.

Me desculpem pessoal, sou noob para caramba, pq comecei a pouco tempo estudar o mundo das programações. Arrumei meu codigo e adicionei a classe scanner, compilou td certinho, mas na hora de exibir a resposta apareceu isso (java.util.InputMismatchException). Enfim, não quero estar mais tomando tempo de ninguem, agradeço a compreensão de todos vocês, e obrigado por me indicar esse caelum, vou estudar nele! Até mais.

@Luis_Augusto_Santos, Calma Luiz rsrs.

@Elias_Farias
Seu código tem alguns erros, por exemplo, você tentou receber a frase em uma variavel do tipo inteiro para tentar utilizar do seu tamanho, isso é inviavel.
Você tem que receber a frase na String através do Scanner, depois você utiliza uma função da classe String (de uma pesquisada), length para receber o tamanho daquela String.

1 curtida

Veja, você está com dificuldades em coisas fundamentais, conceitos e especificidades que, com a leitura do material da caelum, vão ser sanadas.
Não adianta ficarmos aqui discutindo sexo dos anjos, você realmente precisa entender o começo do básico.

1 curtida

Ajeitei aqui e deu certo! Peço desculpas novamente a tds vcs, principalmente ao amigo Luis. E irei procurar me aprofundar mais, pois só tive 4 aulas até agora de 3h cada! Obrigado e bom final de semana a tds!

Não precisa me pedir desculpas.
Quando você vai estudar alguma coisa, seja lá o que for, procure manter o foco, estar bem atento aos detalhes. Se não entendeu, pergunte. Faça os exercícios propostos. Jamais copie e cole a solução, parte do processo de aprendizado é tentar olhar para o problema de formas diferentes.

1 curtida

Eu particularmente prefiro trabalhar diretamente com os chars ao invés da classe String (por ser imutável, pode ocasionar problemas de performance em alguns casos de manipulação)…

Uma outra forma de fazer…

// mapa de vogais e sua quantidade inicial
Map<Character, Integer> vogais = new HashMap<>();
vogais.put("a", 0);
vogais.put("e", 0);
vogais.put("i", 0);
vogais.put("o", 0);
vogais.put("u", 0);

String frase = Entrada.leiaString("Digite uma frase!");
char[] letras = frase.toCharArray();

for (char letra : letras) {
    char vogal = Character.toLowerCase(letra); // sempre minuscula
    if (vogais.containsKey(vogal)) {
        int qtd = vogais.get(vogal) + 1;
        vogais.put(vogal, qtd); // quantidade atualizada
    }
}

System.out.println( vogais.get("a") + " vogais A existentes!");
System.out.println( vogais.get("e") + " vogais E existentes!");
System.out.println( vogais.get("i") + " vogais I existentes!");
System.out.println( vogais.get("o") + " vogais O existentes!");
System.out.println( vogais.get("u") + " vogais U existentes!");

Fiz meio pela lógica, estou sem ambiente java para rodar o código…

Talvez eu possa ter avançado um pouco os conceitos, caso você ainda esteja iniciando, provavelmente não viu a api de collections, mas é bom para você saber outras formas de fazer… além do mais caso não queira/saiba usar o Map, o conceito de char[] pode ser aproveitado e o for não precisa ter contagens de tamanho etc, já que ele se baseia automaticamente no tamanho do array para rodar…