Foro de elhacker.net

Programación => Java => Mensaje iniciado por: MrDev en 24 Enero 2016, 15:32 pm



Título: Problema con java
Publicado por: MrDev en 24 Enero 2016, 15:32 pm
Llevo aqui 3:30 con esto y he probado con StringTokenizer y StringBuffer pero no doy con la tecla, el caso es que deberia leer todo el string y mostrar la cantidad de consonantes y vocales, a ver si me podeis echar una mano...

este es el codigo del main.

Código
  1. package strings;
  2. import java.util.*;
  3. public class main {
  4.  
  5. public static void main(String[] args) {
  6. Scanner entrada = new Scanner(System.in);
  7.  
  8. System.out.println("Introduce un texto");
  9. Cadena miCadena = new Cadena(entrada.next());
  10.  
  11. System.out.println("Esta cadena tiene "+miCadena.getConsonante()+" consonantes y "+miCadena.getVocal()+" vocales.");
  12.  
  13. entrada.close();
  14. }
  15.  
  16. }

Y este es el codigo del objeto, que seria la cadena:

Código
  1. package strings;
  2.  
  3. public class Cadena {
  4. private String cadena;
  5. private int cont, consonante, vocal;
  6.  
  7. public Cadena(String cadena){
  8. for(cont=0;cont<cadena.length();++cont){
  9. if(cadena.charAt(cont) == 'a' || cadena.charAt(cont) == 'e' || cadena.charAt(cont) == 'i' || cadena.charAt(cont) == 'o' || cadena.charAt(cont) == 'u'){
  10. vocal++;
  11. }
  12. else{
  13. consonante++;
  14. }
  15. }
  16. }
  17.  
  18. public int getConsonante(){
  19. return consonante;
  20. }
  21. public int getVocal(){
  22. return vocal;
  23. }
  24. }


Título: Re: Problema con java
Publicado por: 0xFer en 24 Enero 2016, 15:47 pm
Si quieres leer toda la linea coloca esto donde debe;

Código
  1. entrada.nextLine()

Con next, si ingresas "Hola Mundo" sólo se considera "Hola" el resto se ignora.

En tu código los espacios se cuentan como consonantes y no estás considerando mayúsculas.

Saludos.


Título: Problema con java
Publicado por: MrDev en 24 Enero 2016, 16:37 pm
Si quieres leer toda la linea coloca esto donde debe;

Código
  1. entrada.nextLine()

Con next, si ingresas "Hola Mundo" sólo se considera "Hola" el resto se ignora.

En tu código los espacios se cuentan como consonantes y no estás considerando mayúsculas.

Saludos.

Muchas gracias por responder, de verdad.

Gracias por decirme lo del nextLine().

Ya se que no considera las mayusculas, no necesitaba hacerle un .toLowerCase() para leer todo el String.

Y por ultimo, para lo que has dicho sobre que los espacios se cuentan como consonantes, tengo que poner:

Else If(cadena.charAt(cont).isLetter()){...

Pero me da error porque lo considera un boolean ._.


Enviado desde mi iPhone utilizando Tapatalk


Título: Re: Problema con java
Publicado por: 0xFer en 24 Enero 2016, 17:04 pm
Para saber si es una letra puedes hacer algo como:

Código
  1. char caracter = cadena.charAt(cont);
  2. if(Character.isLetter(caracter)){
  3.    if(esVocal) {
  4.  
  5.    }
  6.    else{
  7.  
  8.    }
  9. }

Citar
Else If(cadena.charAt(cont).isLetter()){

charAt devuelve un char( un tipo primitivo), no un objeto de alguna clase, y por lo tanto no tiene métodos.

Saludos.


Título: Re: Problema con java
Publicado por: MrDev en 24 Enero 2016, 17:22 pm
vale, entonces el Character va a parte, yo pensaba que donde Character debia poner entrada, pero no es asi, gracias por resolver la duda.


Título: Re: Problema con java
Publicado por: 0xFer en 24 Enero 2016, 17:28 pm
De nada  ;D

Saludos.


Título: Re: Problema con java
Publicado por: MrDev en 24 Enero 2016, 20:23 pm
Si me permiten poner la solucion final para el que le pueda ser util:

metodo main:
Código
  1. package strings;
  2. import java.util.*;
  3. public class main {
  4.  
  5. public static void main(String[] args) {
  6. Scanner entrada = new Scanner(System.in);
  7.  
  8. System.out.println("Introduce un texto");
  9. Cadena miCadena = new Cadena(entrada.nextLine());
  10.  
  11. System.out.println("Esta cadena tiene "+miCadena.getConsonante()+" consonantes y "+miCadena.getVocal()+" vocales.");
  12.  
  13. entrada.close();
  14. }
  15.  
  16. }
  17.  

clase Cadena:
Código
  1. package strings;
  2.  
  3. public class Cadena {
  4. private int cont, consonante, vocal;
  5. char caracter;
  6.  
  7. public Cadena(String cadena){
  8. for(cont=0;cont<cadena.length();++cont){
  9. caracter = cadena.charAt(cont);
  10. if(Character.isLetter(caracter)){
  11. if(caracter == 'a' || caracter == 'e' || caracter == 'i' || caracter == 'o' || caracter == 'u' ){
  12. vocal++;
  13. }
  14. else{
  15. consonante++;
  16. }
  17. }
  18. }
  19. }
  20.  
  21. public int getConsonante(){
  22. return consonante;
  23. }
  24. public int getVocal(){
  25. return vocal;
  26. }
  27. }