Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Metodos boolean

Estas en el tema de Metodos boolean en el foro de Java en Foros del Web. Tengo el siguiente ejercicio propuesto y varias preguntas sobre el mismo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código java: Ver original public class Comprobaciones {     public boolean ...
  #1 (permalink)  
Antiguo 05/03/2013, 11:35
 
Fecha de Ingreso: noviembre-2012
Ubicación: Adra
Mensajes: 36
Antigüedad: 11 años, 5 meses
Puntos: 0
Metodos boolean

Tengo el siguiente ejercicio propuesto y varias preguntas sobre el mismo:

Código java:
Ver original
  1. public class Comprobaciones {
  2.     public boolean esSimetrico(String cadena){
  3.     //  boolean esSimetrico=false;
  4.         for(int i=0; i<cadena.length(); i++)
  5.             if(cadena.charAt(i)!=cadena.charAt(cadena.length()-i-1))
  6.                 return false;  
  7.         return true;
  8.     }
  9.    
  10.     public boolean esCapicua(int numero){
  11.         return esSimetrico(numero+"");
  12.     }
  13.    
  14.     public boolean esPrimo(int numero){
  15.         for(int i=1; i<numero/2; i++)
  16.             if(numero % i==0)
  17.                 return false;
  18.         return true;
  19.     }
  20.    
  21.     public boolean esAntiguo(int numero){
  22.         if(numero >= 1900)
  23.             return false;
  24.         return true;
  25.     }
  26.    
  27.     public boolean esPar(int numero){
  28.         if(numero % 2!=0)
  29.             return false;
  30.         return true;
  31.     }
  32.    
  33.     public boolean esPositivo(int numero){
  34.         if(numero < 0)
  35.             return false;
  36.         return true;
  37.     }
  38.    
  39.     public boolean esBisiseto(int numero){
  40.         if (numero % 4==0 && numero % 100!=0 || numero % 400==0)
  41.             return true;
  42.         return false;          
  43.     }
  44. }

Código java:
Ver original
  1. import java.util.Scanner;
  2.  
  3. public class VerComprobaciones {
  4.     public static void main(String args []){
  5.         Scanner sc=new Scanner(System.in);
  6.        
  7.         System.out.println("Introduce un número entero:");
  8.         int numero=sc.nextInt();
  9.         Comprobaciones co=new Comprobaciones();// creo el objeto co necesario para usar el método co.esCapicua()
  10.         System.out.println((co.esCapicua(numero)?"Es":"No es")+" capicua.");
  11.         System.out.println((co.esAntiguo(numero)?"Es":"No es")+" un número antiguo.");
  12.         System.out.println((co.esBisiseto(numero)?"Es":"No es")+" bisiesto.");
  13.         System.out.println((co.esPar(numero)?"Es":"No es")+" par.");
  14.         System.out.println((co.esPositivo(numero)?"Es":"No es")+" positivo.");
  15.         System.out.println((co.esPrimo(numero)?"Es":"No es")+" primo.");
  16.     }
  17. }

1. En el método esSimetrico() en la línea 3 le asigna el valor false, he probado a comentarlo y el programa funciona bien, ¿es error del libro o yo no lo he comprobado bien?

2. En el método esPar() yo he usado un if pero el libro simplemente usa un return numero % 2==0. Obviamente entiendo que esa linea sustituye a un if pero no soy capaz de comprender el proceso que sigue, si alguien puede explicarmelo seria de gran ayuda para continuar el libro.

3. En el segundo documento el libro utiliza la expresion nombreMetodo()?"Es":"No es" en cada println. Es la primera vez que veo esta nomenclatura y no estoy familiraizado con ella, quisiera que me la explicaseis tambien.
  #2 (permalink)  
Antiguo 05/03/2013, 12:33
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Metodos boolean

Hola:

1. Efectivamente, esa variable sobra, la crea y luego no la usa para nada.
2. numero%2==0 es una condicion que se evalua a true o false: true si numero%2 es 0 y false en caso contrario. Si el metodo devuelve un boolean, puedes perfectamente devolver eso directamente, ya que al final se evalua en un boolean. return numero%2==0 es una forma abreviada de poner

Código java:
Ver original
  1. if ( numero%2==0 ) {
  2.    return true;
  3. } else {
  4.    return false;
  5. }

3. La sintaxis es condicion?valor1:valor2; Si la condicion es true, esa expresión devuelve valor1 y si es false devuelve valor2.

String variable = nombreMetodo()?"Es":"No es";

es una forma abreviada de poner

Código java:
Ver original
  1. String variable;
  2. if ( nombreMetodo() ) {
  3.    variable = "Es";
  4. } else {
  5.    variable = "No es";
  6. }


Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 05/03/2013, 12:46
 
Fecha de Ingreso: agosto-2012
Mensajes: 18
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Metodos boolean

1. Ese return false está dentro de un if, tal vez no te hayas dado cuenta y es porque no está dentro de corchetes; y pienses que es proceso a seguir. Eso sucede cuando en un if, else if, else o for, notas que la respuesta a lanzar es una sólo una linea de código.

2. if(numero % 2!=0), la expresión % de java obtiene el residuo de los dos números (numero%2) y según la condición compara si este es diferente de 0 (== :igual y != :diferente).

3.Esa expresión es similar a un if, else. En la linea: ...(nombreMetodo()?"Es":"No es")+" capicua.", empieza desde ? y procede analizando: si este es true envía "Es" de lo contrario "No es" y como ya terminó las comparaciones (Dió resultado para true y false) sale de esa expresión y prosigue a concatenar.
  #4 (permalink)  
Antiguo 05/03/2013, 12:51
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Metodos boolean

...haber, paso a responder tus dudas y algunas sugerencia..

1) Cuando comentas la linea 3, en realidad, no modificas nada, porque en ningún lugar estas usando la variable "esSimetrico", entonces no afecta en nada su existencia...ahora a modo de sugerencia, por convenciones, no uses identificadores iguales para métodos y variables, y si estas empezando a programarr, en toda estructura de bloque, usa las llaves para cerrar cada bloque...porque mas de una vez te traerá problemas, pasaras horas buscando solución, cuando en realidad era un problema de llaves, y es muy típico este error en principiantes...

2) Al escribir este codigo "return numero % 2==0;", estas efectuando una operación con condiciones lógicos, que retornaran un valor booleano, si el resto de numero / 2 es igual a cero, retornará true, y por lo tanto será par, sino, retornará false y sera impar...lo importa es que puedas notar, que puedes efectuar operaciones o comparaciones lógicas en cualquier lado, sin la necesidad de emplear condicionales... te doy un ejemplo...

Código JAVA:
Ver original
  1. System.out.print("2 es mayor a 3 ??? " + (2>3));

... fíjate que acá estoy efectuando una comparación lógica 2 > 3 dentro de el método "print" sin la necesidad de un condicional...esta comparación retornará un valor booleano, que puede ser true o false... deberías leer un poco mas de operadores y lógica


3) Esto se llama operador condicional ternario, funciona igual que un IF, pero mucho mas simple de usar y rápido...en operador ternario tienes 3 partes...la condicon a verificar, acción a efectuar en caso que sea valida, y acción a efectuar en caso que sea falsa..tienes dos caracteres, a emplear, el primero "?" que separa la condición de las acción a efectuar, y luego tienes ":" que separa las acciones a efectuar

(condición) ? es true, hacer acá : si es false, hacer acá

..este tipo de operador se usa mucho, pero no es muy tenido en cuenta por lo gente menos experimentada...realmente te ayuda a escribir menos código y agilisar el proceso de desarrollo... lógicamente, la experiencia hace al maestro, y debes aprender e identificar cuando te conviene usarlo y cuando no,,,,
  #5 (permalink)  
Antiguo 05/03/2013, 12:55
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Metodos boolean

Cita:
Iniciado por mshelzr Ver Mensaje
1. Ese return false está dentro de un if, tal vez no te hayas dado cuenta y es porque no está dentro de corchetes; y pienses que es proceso a seguir. Eso sucede cuando en un if, else if, else o for, notas que la respuesta a lanzar es una sólo una linea de código...
...error, este no es el caso, para que suceda lo que vos estas planteando, tendría que ser la estructura de esta forma :

Código JAVA:
Ver original
  1. if(algo)
  2.   if(algo)
  3.      linea 1
  4.      linea 2 // NO LEE LINEA 2
  #6 (permalink)  
Antiguo 05/03/2013, 13:26
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Metodos boolean

Cita:
Iniciado por ipraetoriux Ver Mensaje
...error, este no es el caso, para que suceda lo que vos estas planteando, tendría que ser la estructura de esta forma :

Código JAVA:
Ver original
  1. if(algo)
  2.   if(algo)
  3.      linea 1
  4.      linea 2 // NO LEE LINEA 2
Creo que te refieres correctamente al caso de que en tu ejemplo línea 1 sea un return, pero por si acaso aclarar que si no lo es, por línea 2 pasa siempre.

http://ideone.com/1rabSL
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 06/03/2013, 03:36
 
Fecha de Ingreso: noviembre-2012
Ubicación: Adra
Mensajes: 36
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Metodos boolean

Vaya, he tenido mas ayuda de la esperada. Muchisimas gracias a todos, todas mis dudas han sido aclaradas a la perfección.

Etiquetas: boolean, metodos, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:55.