Clases Java - Clases Wrapper, String y Math
Clases Java - Clases Wrapper, String y Math
- 2008 -
EL PAQUETE DEL LENGUAJE JAVA
El paquete del lenguaje Java, conocido también como java.lang, es uno de los paquetes
más importantes de la API1 de Java, y contiene las clases que constituyen el corazón del
lenguaje de programación Java.
import java.lang.* ;
El paquete java.lang contiene clases que encapsulan los tipos primitivos de datos, una
clase que proporciona los objetos 2 para manipular la entrada y la salida estándar, clases
para manipular cadenas de caracteres, una clase que proporciona métodos 3
correpondientes a las funciones matemáticas, etc.
1
API: Aplication Program Interface.
Una API es un conjunto de normas que determinan como debe usarse una determinada función de un
lenguaje de programación en una aplicación.
2
Objetos: Modelos de entes del mundo.
Un objeto de software es cualquier cosa, real o abstracta, acerca del cual almacenamos datos y los métodos
que controlan dichos datos.
3
Métodos: Desarrollo de algoritmos.
Los métodos especifican la forma en que se controlan los datos de un objeto y es donde se define el
comportamiento del mismo. En palabras sencillas; en los métodos se desarrollan o codifican los algoritmos.
Pag. 3
Entre las clases que serán tratadas en esta primera parte del Apéndice se tienen:
1. Clases que envuelven los tipos de datos primitivos, conocidas como las clases
wrappers (envoltorios). Cada una de estas clases (consideradas subclases 4), a
excepción de la clase Character, se derivan de la clase abstracta 5 Number
(considerada superclase).
• Boolean.
• Byte.
• Character.
• Double.
• Float.
• Integer.
• Long.
• Short.
• Math.
3. Clase que proporciona los objetos necesarios para manipular y tratar cadenas
de caracteres.
• String.
4
Herencia: Subclase y Superclase.
La Herencia es uno de los conceptos más importantes de la Programación Orientada a Objetos (POO).
Utilizando la herencia se puede derivar una nueva clase a partir de otra clase existente, donde la nueva clase
derivada heredará todos los atributos y métodos de la clase existente. La nueva clase se llama Clase Derivada
(o subclase) y la clase original se llama Clase Base (o superclase).
5
Clase Abstracta: Clase tratada como SuperClase.
Una Clase Abstracta es un tipo de clase de la cual no se pueden crear o instanciar objetos. En su lugar, se
debe derivar una nueva clase a partir de la clase abstracta, codificar los métodos que son declarados como
abstractos en la clase abstracta y crear o instanciar objetos a partir de la clase derivada. Las clases abstractas
se utilizan para forzar a los programadores a desarrollar algunos o todos los métodos de una clase.
Pag. 4
En Java, los métodos siempre están dentro de una clase. Algunos métodos pueden ser
invocados o ejecutados utilizando directamente el nombre de la clase en la cual están
definidos, tal es el caso de los métodos de la clase Math de Java. Estos métodos son
conocidos como métodos estáticos o de clase.
Por otro lado, otros métodos son invocados o ejecutados utilizando un objeto o
instancia6 de la clase en la cual están definidos, tal es el caso de los métodos de la clase
String de Java. Estos métodos son conocidos como métodos de instancia o de objeto.
▪ Clase Calendar
▪ Clase GregorianCalendar
▪ Clase SimpleDateFormat
6
Instancia: Representación concreta de una clase.
Una Instancia viene a ser lo mismo que un objeto. Crear un objeto o instanciar una clase se refiere a poder
tener una representación real de una clase.
Pag. 5
Pag. 6
CONVERSIÓN DE DATOS
Como regla general, una variable solo puede almacenar valores de acuerdo al tipo de
dato con el que fue declarado. Es decir, si se declara una variable con un tipo de dato
específico, solo podrá almacenar valores de dicho tipo de dato. En base a esto, si se
declara una variable con un tipo de dato específico y se intenta almacenar un valor de
distinto tipo, al momento de compilar, el programa indicará un error.
Problema 156
Clase PrgTipoDato01
package dominioDeLaAplicacion ;
class PrgTipoDato01 {
System.out.println ( numEntero ) ;
}
}
Observación: No se puede almacenar un número real grande (double) en una variable entera
(int).
Problema 157
Clase PrgTipoDato02
package dominioDeLaAplicacion ;
class PrgTipoDato02 {
System.out.println ( numRealFloat ) ;
}
}
Pag. 7
Observación: No se puede almacenar un número real grande (double) en una variable real
(float).
Problema 158
Clase PrgTipoDato03
package dominioDeLaAplicacion ;
class PrgTipoDato03 {
System.out.println ( caracter ) ;
}
}
Como se mencionó, solo se puede almacenar un solo valor en una variable y ese valor
debe ser del tipo de dato con el que la variable fue declarada. Pero como toda regla,
esta también tiene su excepción, y la excepción para estos casos se denomina
conversión de datos.
A continuación se muestra los tipos de datos numéricos ubicados desde el tipo de dato
de menor precisión al tipo de dato de mayor precisión:
Pag. 8
Problema 159
Clase PrgTipoDato04
package dominioDeLaAplicacion ;
class PrgTipoDato04 {
public static void main ( String arg [ ] ) {
int numEntero = 5 ;
long numEnteroGrande ;
// Se visualiza 5
System.out.println ( numEnteroGrande ) ;
}
}
Problema 160
Clase PrgTipoDato05
package dominioDeLaAplicacion ;
class PrgTipoDato05 {
public static void main ( String arg [ ] ) {
// Se visualiza 97.0
System.out.println ( numReal ) ;
}
}
Pag. 9
La conversión implícita de datos se realiza al mezclar variables de distinto
tipo en expresiones matemáticas o al ejecutar instrucciones o sentencias de
asignación. En ambos casos, es necesario que el lado izquierdo de la
expresión tenga un tipo de dato más amplio que el resultado de evaluar el
lado derecho:
numReal = numEntero + 5 ;
Lado izquierdo
de la expresión
Problema 161
Pag. 10
Clase PrgTipoDato06
package dominioDeLaAplicacion ;
class PrgTipoDato06 {
public static void main ( String arg [ ] ) {
double num1 = 20, num2 = 3 ;
int div ;
System.out.println ( div ) ;
}
}
Problema 162
Clase PrgTipoDato07
package dominioDeLaAplicacion ;
class PrgTipoDato07 {
public static void main ( String arg [ ] ) {
double num1 = 20, num2 = 3 ;
int div ;
// Se visualiza 6.
System.out.println ( div ) ;
}
}
Las Clases Wrappers tratadas a continuación permiten envolver los tipos de datos
simples y realizar operaciones de conversión, entre otras.
Pag. 11
ENVOLTORIOS DE LOS TIPOS DE DATOS PRIMITIVOS: CLASES WRAPPERS
INTRODUCCIÓN
Los tipos de datos primitivos (boolean, byte, char, double, float, int, long,
short), conocidos también como tipos de datos simples, son los únicos
elementos del lenguaje de programación Java que se representan internamente
a través de valores, tal y como se representan en un lenguaje de programación
convencional. Esto significa que los tipos de datos primitivos no son objetos y se
sitúan fuera de la jerarquía de clases 7 de Java. Esto tiene algunas ventajas
desde el punto de vista de la eficiencia.
Existe una clase wrapper para cada uno de los tipos de datos primitivos, que
permiten tratarlos como objetos. Dichas clases se muestran a continuación:
boolean Boolean
byte Byte
char Character
double Double
float Float
int Integer
7
Jerarquía de clases: Forma de ordenar las clases.
La jerarquía de clases es una forma de ordenar las clases existentes en un lenguaje de Programación
Orientado a Objetos (POO). Una jerarquía de clases define conceptos abstractos en la parte superior de la
jerarquía y conforme se desciende en la jerarquía los conceptos se tornan cada vez más concretos. Java tiene
su propia jerarquía de clases, estando en la parte superior de la jerarquía, la clase Object (esta clase
pertenece al paquete java.lang).
Pag. 12
TIPO DE DATO CLASES
PRIMITIVO WRAPPERS
Long Long
Short Short
java.lang.Object
int i = 5;
Integer I = new Integer ( i );
Pag. 13
MÉTODOS
Con la finalidad de resumir los métodos de las clases wrappers que permiten la
conversión, comprobación y traslación de datos, se utilizarán algunos objetos de
dichas clases. Se asume que los objetos han sido creados previamente. Dichos
objetos son:
CLASE AL QUE
OBJETO
PERTENECE
S String
I Integer
L Long
F Float
D Double
C Character
TIPO DE DATO
VARIABLE
PRIMITIVO
i int
l long
f float
d double
b boolean
c char
Para referirnos a objetos se utilizará una letra en mayúscula, mientras que, para
referirnos a las variables se utilizará una letra minúscula.
Pag. 14
Conversión de tipo de dato primitivo a objeto String
CLASES WRAPPERS Y
OBJETO STRING
VARIABLES
S = Integer.toString (i ) ;
S = Long.toString ( l ) ;
S = Float.toString ( f ) ;
S = Double.toString ( d ) ;
S = I.toString ( ) ;
S = L.toString ( ) ;
S = F.toString ( ) ;
S = D.toString ( ) ;
Pag. 15
Todas las clases wrappers tienen en común el método estático o de clase
toString ( ). Esto se debe, a que este método no pertenece a dichas clases, sino
que pertenece a la clase Object.
Integer.valueOf (S) ;
i =
Integer.parseInt (S) ;
Long.valueOf (S) ;
l =
Long.parseLong (S) ;
Float.valueOf (S) ;
f =
Float.parseFloat (S) ;
Double.valueOf (S) ;
d =
Double.parseDouble (S) ;
Pag. 16
Conversión de objetos wrappers a tipos de datos primitivos
I.intValue ( ) ;
L.intValue ( ) ;
i =
F.intValue ( ) ;
D.intValue ( ) ;
I.longValue ( ) ;
L.longValue ( ) ;
l =
F.longValue ( ) ;
D.longValue ( ) ;
I.floatValue ( ) ;
L.floatValue ( ) ;
f =
F.floatValue ( ) ;
D.floatValue ( ) ;
I.doubleValue ( ) ;
L.doubleValue ( ) ;
d =
F.doubleValue ( ) ;
D.doubleValue ( ) ;
Observe que todas las clases wrappers tienen en común los métodos de
instancia intValue ( ), longValue ( ), floatValue ( ) y doubleValue ( ).
Todas las clases wrappers tienen en común los métodos de instancia intValue( ),
longValue( ), floatValue( ) y doubleValue( ). Estos métodos pertenecen en
realidad a la clase Number.
Pag. 17
Comprobaciones del valor Not-a-Number
CLASES WRAPPERS Y
VARIABLE
VARIABLES
Float.isNaN ( f ) ;
b =
Double.isNaN ( d );
F.isNaN ( ) ;
b =
D.isNaN ( );
CLASES WRAPPERS Y
VARIABLE
VARIABLES
Float.isInfinite ( f ) ;
b =
Double.isInfinite ( d );
Pag. 18
Comprobación del valor infinito utilizando objetos wrappers:
F.isInfinite ( ) ;
b =
D.isInfinite ( );
Comprobaciones de caracteres
“Devuelve true si el
Character.isLowerCase (c) ; caracter es una
letra minúscula”.
“Devuelve true si el
Character.isUpperCase (c) ; caracter es una
letra mayúscula”.
b =
“Devuelve true si el
Character.isDigit (c) ; caracter es un
dígito decimal”.
“Devuelve true si el
Character.isSpace (c) ; caracter es un
espacio en blanco”.
Pag. 19
Traslación de caracteres
“Convierte el
Character.toLowerCase (c); caracter a una letra
minúscula”.
c =
“Convierte el
Character.toUpperCase (c); caracter a una letra
mayúscula”.
Pag. 20
Problema 163
Clase PrgConvertirAString
package dominioDeLaAplicacion ;
class PrgConvertirAString {
String cadena = “ ”;
Observe que es posible convertir cualquier tipo de dato a cadena (String) utilizando el método valueOf
( ) de la clase String. En ciertas ocasiones esto es necesario ya que las cadenas pueden ser
manipuladas. Analice como se pueden manipular las variables de tipo cadena (String) más adelante en
este mismo capítulo.
Pag. 21
Problema 164
Clase PrgConvertirFecha
package dominioDeLaAplicacion ;
import java.util.Date ;
class PrgConvertirFecha {
cadena = hoy.toString ( ) ;
System.out.println ( “ Fecha: ” + cadena ) ;
}
}
La clase Date, es una clase propia de Java y está incluida en el paquete java.util. En este paquete
podrá encontrar clases de utilidad para sus aplicaciones. Este paquete está fuera del alcance del
presente texto (sugiero que investigue las clases que forman parte de este paquete).
Observe como se convierte la fecha almacenada en un objeto (llamado hoy) de la clase Date en una
cadena (String) utilizando el método toString ( ) de la clase String. Esta cadena de texto podrá ser
manipulada para obtener otros datos, tales como, el día, el mes, el año actual o la hora del sistema.
Analice como se pueden manipular las variables de tipo cadena (String) más adelante en este mismo
capítulo.
Pag. 22
Problema 165
Clase PrgCadenaAEntero
package dominioDeLaAplicacion ;
class PrgCadenaAEntero {
int numEntero = 0 ;
String cadena = “10" ;
}
}
Observe que es posible convertir una cadena (String) en un valor entero (int) o en un objeto de la clase
Integer. Recuerde, que deberá asegurarse que la cadena contenga un valor válido para que pueda ser
almacenado en un tipo de dato determinado.
Puede utilizar el método parseInt ( ) de la clase String para convertir una cadena en un número entero
(numEntero) y también el método valueOf ( ) de la clase Integer para convertir una cadena en un un
objeto (objInteger) de la clase Integer. El método intValue ( ) nos permite obtener el valor entero del
objeto (objInteger) de la clase Integer.
Como sugerencia desarrolle un programa en Java que realice lo mismo que este programa pero utilice
una variable long y la clase Long.
Pag. 23
Problema 166
Clase PrgCadenaAReal
package dominioDeLaAplicacion ;
class PrgCadenaAReal {
double numRealDoble = 0 ;
String cadena = “10.5” ;
}
}
Observe que es posible convertir una cadena (String) en un valor entero (double) o en un objeto de la
clase Double. Recuerde, que deberá asegurarse que la cadena contenga un valor válido para que
pueda ser almacenado en un tipo de dato determinado.
Puede utilizar el método parseDouble ( ) de la clase Double para convertir una cadena en un número
real (numRealDoble) y también el método valueOf ( ) de la clase Double para convertir una cadena en
un un objeto (objDouble) de la clase Double. El método doubleValue ( ) nos permite obtener el valor
real del objeto (objDouble) de la clase Double.
Como sugerencia desarrolle un programa en Java que realice lo mismo que este programa pero utilice
una variable float y la clase Float.
Pag. 24
Pag. 25
FUNCIONES MATEMÁTICAS: CLASE MATH
INTRODUCCIÓN
java.lang.Object
java.lang.Math
Ejemplo:
Math.pow (a, b) ;
8
Clase Final: No puede ser una superclase.
Una clase final o declarada como final es una clase que no puede ser una superclase. Es decir, las clases
finales no pueden heredarse. Todos los métodos de una clase final son implícitamente finales.
Pag. 26
MÉTODOS
Atributos de clase:
1. E.
2. PI.
Métodos de clase:
1. abs( ).
2. acos( ).
3. asin( ).
4. atan( ).
5. ceil( ).
6. cos( ).
7. exp( ).
8. floor( ).
9. log( ).
10. max( ).
11. min( ).
12. pow( ).
13. random( ).
14. round( ).
15. sin( ).
16. sqrt( ).
17. tan( ).
18. toDegrees( ).
19. toRadians( ).
Para trabajar con los métodos de clase, de la clase Math, no será necesario
crear previamente un objeto de dicha clase (esto se cumple para todas las
clases que implementen métodos de clase).
Pag. 27
A continuación se presenta una breve descripción del uso de cada uno de los
métodos de la clase Math:
CLASE Math
ATRIBUTOS DE
DESCRIPCIÓN USO
CLASE
double e = Math.E ;
Almacena el valor de E. Es decir, nos
System.out.print( e) ;
proporciona la base de un logaritmo
E
natural. El valor es equivalente a
Resultado:
2.718281828459045.
e = 2.718281828459045.
double pi = Math.PI ;
Almacena el valor de PI. Es decir, System.out.print( pi) ;
PI almacena el valor equivalente a
3.141592653589793. Resultado:
pi = 3.141592653589793.
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
abs (float)
int x = -5 ;
abs (double)
Retorna el valor absoluto de un System.out.print( Math.abs( x)) ;
número (que puede ser float, double,
int, long) dado como parámetro. Resultado:
abs (int) x = 5.
abs (long)
Pag. 28
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
result = 1.0
Pag. 29
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
double x = 2 , y = 4 , result ;
Retorna un valor double con la result = Math.pow( x , y ) ;
potencia de un número (dado como System.out.print ( result ) ;
primer parámetro) elevado a otro
pow (double, double)
número (dado como segundo Resultado:
parámetro). Los dos parámetros
dados deben ser double. result = 16.
round (float)
Pag. 30
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
result = 0.6018150231520483
double x = 16 , result ;
Retorna un valor double con la raiz result = Math.sqrt( x ) ;
System.out.print ( result ) ;
cuadrada del parámetro dado. El
sqrt (double)
parámetro dado debe ser un valor
double. Resultado:
result = 4.
Pag. 31
Problema 167
Clase PrgNumeroMayor
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumeroMayor {
Parámetros.
Operador punto.
Nombre de la Clase.
Pag. 32
El método max ( ) nos permite determinar el número mayor entre dos números (en nuestro caso el
número mayor entre num2 y num3).
Observe que en esta solución se emplea una estrategia mas simple para determinar el número mayor
entre tres números. El método max ( ) de la clase Math, retorna el valor del número mayor (puede ser
un número float, double, int o long) de dos números dados como parámetros. En nuestro ejemplo
determinamos el mayor de los dos últimos números ingresados y en la misma línea de código
evaluamos el mayor de estos dos números con el primer número ingresado, tal y como se muestra a
continuación:
Es importante tener presente que el método max ( ) es un método que solo podemos utilizar con la
clase Math y su función es determinar el número mayor entre dos números dados como parámetros.
Pag. 33
Problema 168
Clase PrgNumeroMenor
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumeroMenor {
Observe el uso del método min ( ) de la clase Math: En la codificación de esta solución se emplea una
nueva estrategia para hallar el menor de tres números ingresados por teclado (anteriormente se
utilizaban sentencias if anidadas).
Observe que Math.min ( ) retorna el valor del número menor (que puede ser float, double, int, long) de
dos números dados como parámetros. En nuestro ejemplo hallamos el menor de los dos últimos
números ingresados, y en la misma línea evaluamos el menor de estos dos números con el primer
número ingresado, tal y como se muestra a continuación:
Pag. 34
Problema 169
Clase PrgNumerosAleatorios
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumerosAleatorios {
En la codificación de esta solución se utiliza una sentencia for con la finalidad de generar la cantidad
de números aleatorios (al azar) que el usuario desee. Cada vez que se ejecuta la sentencia for, se
genera y muestra un número aleatorio (un número entre 1 y 6), el cual es acumulado en la variable
suma. Finalizada la ejecución de la sentencia for se muestra el contenido de dicha variable (es decir,
se muestra la suma de los números aleatorios generados).
Pag. 35
Recuerde que para generar números aleatorios entre dos números (entre un intervalo o rango),
utilizando el método random ( ) de la clase Math, se emplea la siguiente fórmula:
1 + (int) ( Math.random( ) * ( 6 – 1 + 1 ) ) ;
1 + (int) ( Math.random( ) * ( 6 ) ) ;
Pag. 36
Problema 170
Clase PrgNumAleatoriosPares
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumAleatoriosPares {
do {
num = 1 + (int) ( Math.random( ) * 10 ) ;
if (num % 2 == 0) {
cont++;
System.out.print ( num + “ \t ” ) ;
}
En la codificación de esta solución se utiliza una sentencia do con la finalidad de generar números
aleatorios. Si el número generado es par se le aumenta uno a la variable cont (que esta trabajando
como contador de números pares generados al azar) y se muestra el número generado.
Pag. 37
Problema 171
Clase PrgNumAleatoriosImpares
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumAleatoriosImpares {
do {
num = 1 + (int) ( Math.random( ) * 10 ) ;
if ( num % 2 == 1 ) {
cont ++;
System.out.print ( num + “ \t ” ) ;
}
En la codificación de esta solución se utiliza una sentencia do con la finalidad de generar números
aleatorios. Si el número generado es impar se le aumenta uno a la variable cont (que esta trabajando
como contador de números impares generados al azar) y se muestra el número generado.
Pag. 38
Problema 172
Desarrollar un programa en Java que permita ingresar por teclado el radio de una
esfera. Calcular y mostrar el volumen de dicha esfera.
Clase PrgRadioEsfera
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgRadioEsfera {
El método pow ( ) retorna un valor double con la potencia de un número (dado como primer parámetro)
elevado a otro número (dado como segundo parámetro). En nuestro caso el método pow ( ) eleva a la
potencia 3 el radio del círculo.
Para hallar el volumen de la esfera se tendrá que utilizar la fórmula v=4/3*PI*R 3. La clase Math define
un atributo (constante) muy útil, que contiene en valor del número PI (Math.PI).
Pag. 39
Problema 173
Clase PrgNumRedondeado
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumRedondeado {
resultado = Math.round(num) ;
}
}
resultado = Math.round(num) ;
En esta solución se ingresa un número y se almacena en la variable num. Luego, dicho número es
redondeado utilizando el método round ( ) y se almacena en la variable resultado.
Pag. 40
Problema 174
Clase PrgNumPotencia
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumPotencia {
Recuerde y siempre tenga presente que el método pow ( ) de la clase Math, retorna un valor double,
por lo que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por
la pantalla.
Pag. 41
Problema 175
Clase PrgNumRaiz
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumRaiz {
int cant ;
double rpta ;
rpta = Math.sqrt ( x ) ;
En la presente solución se utiliza una sentencia for con la finalidad de obtener la raíz cuadrada de
todos los números menores que la variable cant y mostrarlos por pantalla. La variable cant se ingresa
por el teclado.
Recuerde y siempre tenga presente que el método sqrt ( ) de la clase Math, retorno un valor double,
por lo que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por
la pantalla.
Pag. 42
Problema 176
Clase PrgNumAleatorioCuad
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumAleatorioCuad {
En la presente solución se utiliza una sentencia for con la finalidad de obtener números aleatorios,
elevarlos al cuadrado y mostrarlos por pantalla. La variable cant se ingresa por el teclado.
Pag. 43
Problema 177
Clase PrgTriangulo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgTriangulo {
p = (a + b + c) / 2 ;
tmp = ( p * (Math.abs(p - a)) * (Math.abs(p - c)) * (Math.abs(p - b) ) ) ;
area = Math.sqrt ( tmp ) ;
Pag. 44
Observe el uso de los métodos abs ( ) y sqrt ( ) de la clase Math:
En esta solución se ingresan los valores de los tres lados de un triángulo y se obtiene el valor del
semiperímetro del triángulo.
Primero, se hace uso del método abs ( ) de la clase Math para calcular el valor absoluto de la
diferencia entre el semiperímetro y cada uno de los lados del triángulo. Luego, se multiplican los
valores resultantes con el valor del semiperímetro del triángulo y finalmente, se obtiene la raíz
cuadrada del valor resultante utilizando el método sqrt ( ) de la clase Math.
Pag. 45
Problema 178
perimetro = 2 * PI * radio.
area = PI * radio * radio.
Clase PrgCirculo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgCirculo {
Pag. 46
Problema 179
Clase PrgConversionAngulo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgConversionAngulo {
public static void main ( String arg [ ] ) {
double anguloGrados, anguloRadianes ;
String tipoAngulo = “” ;
Pag. 47
¿Que hay de nuevo en la codificación?
Para el desarrollo de esta solución se hace uso de sentencias if múltiples con la finalidad de
determinar el tipo de ángulo ingresado por teclado. El tipo de ángulo es almacenado en una variable
String (tipoAngulo) y mostrado por pantalla.
Para realizar la conversión del ángulo ingresado en el sistema sexagesimal al sistema radial se utiliza
el método toRadians ( ) de la clase Math.
Pag. 48
Problema 180
x = ( - B + - ( ( B ** 2 – 4 * A * C ) RAIZ ( 2 ) ) ) / 2 * A.
Clase PrgEcuacion2Grado
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgEcuacion2Grado {
public static void main ( String arg [ ] ) {
int a, b, c ;
double tmp, x, x1, x2 ;
System.out.println ( “ Ingrese el coeficiente A: ” ) ;
a = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el coeficiente B: ” ) ;
b = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el coeficiente C: ” ) ;
c = Lectura.leerInt( ) ;
if (a == 0 && b == 0) {
System.out.println ( “ La ecuación no tiene solución ” ) ;
} else {
tmp = Math.pow (b, 2) - (4 * a * c) ;
if (tmp < 0) {
System.out.println ( “ La ecuación tiene raices imaginarias ” ) ;
} else {
if (a == 0) {
x = c / b * (-1) ;
System.out.println ( “ El valor para x es: ” + x ) ;
} else {
x1 = ( - b + Math.sqrt (tmp)) / (2 * a) ;
x2 = ( - b - Math.sqrt (tmp)) / (2 * a) ;
System.out.println ( “ El primer valor para x es: ” + x1 ) ;
System.out.println ( “ El segundo valor para x es: ” + x2 ) ;
}
}
}
}
}
Pag. 49
¿Que hay de nuevo en la codificación?
En esta solución se ingresan los coeficientes de una ecuación de segundo grado (a, b y c). Si los
coeficientes a y b son iguales a cero, se muestra un mensaje por la pantalla; “La ecuación no tiene
solución”. Caso contrario, se determina el valor de la discriminante, el cual se almacena en la variable
tmp utilizando la siguiente formula:
En caso que el valor de tmp sea igual a cero, se muestra el siguiente mensaje por pantalla; “La
ecuación tiene raices imaginarias”. Caso contrario, si el coeficiente a es igual a cero la ecuación
tendría una sola solución, la cual se calcularía utilizando:
x = c / b * (-1) ;
Si el coeficiente a es diferente de cero la ecuación tendría dos soluciones, las cuales se calcularían
utilizando:
x1 = ( - b + Math.sqrt (tmp)) / (2 * a) ;
x2 = ( - b - Math.sqrt (tmp)) / (2 * a) ;
Pag. 50
Problema 181
Clase PrgJuego
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgJuego {
public static void main ( String arg [ ] ) {
int maximo = 100, num, numAzar, inten = 1 ;
double tmp;
System.out.println ( “ Bienvenido al juego: ¿Que número es? ” ) ;
System.out.println ( “ ----------------------------------------------------” ) ;
System.out.println ( “ - La computadora genera un -” ) ;
System.out.println ( “ - numero aleatorio y ud. tratara -” ) ;
System.out.println ( “ - de adivinar que número es -” ) ;
System.out.println ( “ - Trate de adivinar el número en -” ) ;
System.out.println ( “ - el menor número de intentos -” ) ;
do {
System.out.println ( “ Ingrese un número entre 0..100: ” ) ;
num = Lectura.leerInt( ) ;
} while (num < 0 || num > 100 ) ;
tmp = maximo * Math.random( ) ;
numAzar = (int) Math.round(tmp) ;
while (num != numAzar) {
inten++ ;
if (num < numAzar)
System.out.println ( “ El número buscado es mayor ” ) ;
else
System.out.println ( “ El número buscado es menor ” ) ;
do {
System.out.println ( “ Ingrese otro número entre 0..100: ” ) ;
num = Lectura.leerInt( ) ;
} while (num < 0 || num > 100) ;
}
System.out.println ( “ Ud. encontró el número en: ” + inten + “ intento(s) ” ) ;
}
}
Pag. 51
¿Qué hay de nuevo en la codificación?
Utilizando el método random ( ) generamos un número aleatorio (al azar) entre el número 0 y el
número 100, utilizando la siguiente fórmula:
Este número generado al azar, almacenado en la variable numAzar, es comparado con un número
previamente ingresado por teclado y almacenado en la variable num. Si ambos son iguales, se
mostrará un mensaje indicando que el número numAzar fue encontrado. Si no son iguales, se
mostrará un mensaje, indicando si el número buscado es mayor o es menor (en relación al número
ingresado) y se solicitará otro número hasta encontrar el número que se generó en forma aleatoria.
Pag. 52
Problema 182
Clase PrgNumeroMayorMenor
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumeroMayorMenor {
public static void main ( String arg [ ] ) {
int n1, n2, n3, n4, n5, n6 ;
double mayor, meno r;
System.out.println ( “ Ingrese el primer número: ” ) ;
n1 = Lectura.leerInt();
System.out.println ( “ Ingrese el segundo número: ” ) ;
n2 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el tercer número: ” ) ;
n3 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el cuarto número: ” ) ;
n4 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el quinto número: ” ) ;
n5 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el sexto número: ” ) ;
n6 = Lectura.leerInt( ) ;
mayor = Math.max (n1,n2) ;
mayor = Math.max (mayor,n3) ;
mayor = Math.max (mayor,n4) ;
mayor = Math.max (mayor,n5) ;
mayor = Math.max (mayor,n6) ;
menor = Math.min (n1,n2) ;
menor = Math.min (menor,n3) ;
menor = Math.min (menor,n4) ;
menor = Math.min (menor,n5) ;
menor = Math.min (menor,n6) ;
System.out.println ( “ El mayor número es: " + mayor ) ;
System.out.println ( “ El menor número es: " + menor ) ;
}
}
Modificar la codificación de la solución de tal forma que pueda optimizar el código. Utilice una
sentencia for.
Pag. 53
Pag. 54
Problema 183
Desarrollar un programa en Java que permita ingresar las notas de todos los
alumnos de un determinado salon de clase. Calcular y mostrar el promedio final de
cada alumno en base a la siguiente fórmula:
pf = ( pp + ep + ( ef * 2 ) ) / 4.
Donde:
pf = Promedio final.
pp = Promedio de prácticas.
Son 4 prácticas de las cuales se elimina la más baja
pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3
ep = Examen parcial.
ef = Examen final.
Clase PrgPromedioNotas
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgPromedioNotas {
do {
Pag. 55
Continúa… Etapa 04 - Desarrollo de la Codificación.
Clase PrgPromedioNotas
pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3 ;
pf = ( pp + ep + ef ) / 3 ;
pf = Math.round (pf) ;
opc=Lectura.leerChar( ) ;
}
}
Modificar la codificación de la solución de tal forma que se elimine la práctica con la nota más baja y se
duplique la nota de la práctica más alta. Muestre el promedio de las notas redondeado a dos
decimales.
Pag. 56
Problema 184
Clase PrgRedondearNumero
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgRedondearNumero {
double numero ;
System.out.println ( “ -----------------------------------” ) ;
System.out.println ( “ La parte entera del número es: ” ) ;
System.out.println ( Math.floor (numero) ) ;
El método floor ( ) retorna un valor double con el valor más grande no mayor que el parámetro dado. El
parámetro dado debe ser double. Nótese que si ingresamos un numero cuya parte decimal es mayor
que 5 sólo retorna la parte entera para tal caso se le agrega 0.5 para que en el segundo cálculo tenga
efecto de redondeo perfecto. Observe como se redondea un número con uno, dos y tres decimales
utilizando el método floor ( ).
Pag. 57
Problema 185
Sugerencia:
Utilice el método random ( ) de la clase Math para
generar el número del boleto ganador.
Clase PrgSorteo
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSorteo {
double num ;
int boletos, ganador ;
do {
if (boletos > 0) {
do {
} while (ganador == 0) ;
Pag. 58
Problema 186
Clase PrgSumaCuadradosCubos
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSumaCuadradosCubos {
Pag. 59
Problema 187
Clase PrgSenCos
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgSenCos {
do{
}
}
Es importante mencionar que Java trabaja con el sistema radial y para obtener las razones
trigonométricas, seno y coseno, de un ángulo ingresado por teclado hay que convertirlo primero al
Pag. 60
sistema radial. Para esto, utilizamos el método toRadians ( ) de la clase Math. Este método retorna un
valor double y permite convertir un ángulo expresado en el sistema sexagesimal (enviado como
parámetro double) en un ángulo expresado en radianes. Una vez convertido el ángulo en radianes
podemos utilizar los métodos sin ( ) y cos ( ) de la clase Math para obtener el seno y el coseno del
ángulo ingresado por teclado.
Pag. 61
Problema 188
Clase PrgTangente
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgTangente {
anguloRadianes = Math.toRadians(anguloGrados) ;
tangente = Math.tan(anguloRadianes) ;
System.out.println ( “ La pendiente de la resta es = ” + tangente ) ;
}
}
El método tan ( ) permite hallar la pendiente de una recta con respecto al eje X. Para ello, utiliza el
ángulo de inclinación de la recta, expresado en el sistema radial, tal y como se muestra:
tangente = Math.tan(anguloRadianes) ;
Pag. 62
Problema 189
Clase PrgHipotenusa
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgHipotenusa {
}
}
La fórmula para este caso sería: (hipotenusa)2 = (cateto1)2 + (cateto2)2 . Se ingresan los catetos por el
teclado y son elevados al cuadrado con Math.pow ( ). El resultado obtenido, al elevar al cuadrado cada
uno de los catetos, se suman. Luego se obtiene la raíz cuadrada con Math.sqrt ( ) y finalmente se
muestra el resultado almacenado en la variable hipotenusa. Ejemplo:
Pag. 63
Problema 190
Clase PrgPunto
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgPunto {
}
}
Sabemos que Math.atan ( ) retorna un valor double con el arcotangente de un ángulo expresado en
radianes. Dicho ángulo expresado en radianes debe ser un valor double enviado al método como
parámetro.
Pag. 64
Pero en este caso, se ingresan por teclado la ordenada y la abcisa de un punto cualquiera en el
sistema de coordenadas, por lo que el método atan ( ) de la clase Math no nos serviría (este método
necesita el valor de un ángulo expresado en radianes y no los valores de las coordenadas de un
punto).
En este caso, se utiliza el método atan2 ( ) de la clase Math. Este método nos permite obtener el valor
del arcotangente de un par ordenado.
Pag. 65
Problema 191
Clase PrgExpLog
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgExpLog {
exponencial = Math.exp(num) ;
logaritmo = Math.log(num) ;
exponencial = Math.exp(num) ;
logaritmo = Math.log(num) ;
En esta solución se hace necesario el uso del método exp ( ) para obtener el número e elevado al
número ingresado por teclado:
enum
También se hace necesario el uso del método log ( ) para obtener el logaritmo natural del número
ingresado en base e:
Pag. 66
logenum
Tenga presente que Java sólo resuelve logaritmos en base e y no en base 10.
Pag. 67
Problema 192
Un jugador lanza dos dados, cada uno de los cuales tiene 6 caras, las caras
contienen 1, 2, 3, 4 ,5 y 6 puntos. Una vez que los dados quedan en reposo, se
suman los puntos de las dos caras que quedan hacia arriba. Si la suma es 7 o 11
en el primer lanzamiento, el jugador gana. Si la suma es 2, 3 o 12 en el primer
lanzamiento (resultado que en los casinos reciben el nombre de “craps”), el
jugador pierde (es decir, la casa gana). Si la suma es 4, 5, 6, 8, 9, 10 en el primer
lanzamiento, esto suma se convierte en el punto del jugador. Para ganar, el
jugador debe seguir tirando los dados hasta “lograr su punto”. El jugador perderá
si tira un 7 antes de lograr su punto.
Clase PrgLanzarDados1
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgLanzarDados1 {
do {
if ( suma1 == 7 || suma1 == 11 ) {
opc1 = “s” ;
estado = 1 ;
Pag. 68
Continúa… Etapa 04 - Desarrollo de la Codificación.
Clase PrgLanzarDados1
} else
if ( suma1 == 2 || suma1 == 3 || suma1 == 12 ) {
opc1 = “s” ;
estado = 0 ;
} else {
do {
System.out.println ( “Lanzar dados” ) ;
Lectura.leerString ( ) ;
if ( suma1 == suma2 ) {
estado = 1 ;
opc1 = “s” ;
opc2 = “s” ;
} else
if ( suma2 == 7 ) {
estado = 0 ;
opc1 = “s” ;
opc2 = “s” ;
}
}
}while ( opc1 != “s” ) ;
if ( estado == 1 )
System.out.println ( “El jugador gana” ) ;
else
System.out.println ( “El jugador pierde ” ) ;
}
}
Pag. 69
Problema 193
Clase PrgLanzarDados2
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgLanzarDados2 {
do {
opc1 = “ ” ;
opc2 = “ ” ;
do {
if ( suma1 == 7 || suma1 == 11 ) {
opc1 = “s” ;
estado = 1 ;
} else
if (suma1 == 2 || suma1 == 3 || suma1 == 12) {
opc1 = “s” ;
estado = 0 ;
} else {
Pag. 70
Continúa… Etapa 04 - Desarrollo de la Codificación.
Clase PrgLanzarDados2
do {
System.out.println ( “Lanzar dados” ) ;
Lectura.leerString ( ) ;
if ( suma1 == suma2 ) {
estado = 1 ;
opc1 = “s” ;
opc2 = “s” ;
} else
if ( suma2 == 7 ) {
estado = 0 ;
opc1 = “s” ;
opc2 = “s” ;
}
}
} while ( opc1 != “s” ) ;
if ( estado == 1 )
System.out.println ( “ El jugador gana ” ) ;
else
System.out.println ( “ El jugador pierde ” ) ;
opc3 = Lectura.leerChar ( ) ;
}
}
Pag. 71
Problema 194
Clase PrgLanzarMoneda
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgLanzarMoneda {
if (moneda == 1)
cont1 ++ ;
else
cont2 ++ ;
Pag. 72
Problema 195
Clase PrgTragamoneda1
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgTragamoneda1 {
do {
s = (char) valor1 ;
switch (s) {
case 1 :
monto = 100 ;
break ;
case 2 :
monto = 200 ;
break ;
case 3 :
monto = 300 ;
break ;
Pag. 73
Continúa… Etapa 04 - Desarrollo de la Codificación.
Clase PrgTragamoneda1
case 4 :
monto = 400 ;
break ;
case 5 :
monto = 500 ;
break ;
case 6 :
monto = 600 ;
break ;
case 7 :
monto = 1000 ;
break ;
}
System.out.println ( “Usted gana : ” + monto + “Soles ” ) ;
} else
System.out.println ( “La casa gana” ) ;
monto = 0 ;
System.out.println ( “Desea volver a jugador [s/n] : ” ) ;
opc1 = Lectura.leerChar ( ) ;
Pag. 74
Problema 196
Clase PrgTragamoneda2
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgTragamoneda2 {
do {
s= (char) valor1 ;
switch ( s ) {
case 1 :
monto=100 ;
break ;
case 2 :
monto=200 ;
break ;
Pag. 75
Continúa… Etapa 04 - Desarrollo de la Codificación.
Clase PrgTragamoneda2
case 3 :
monto=300 ;
break ;
case 4 :
monto=400 ;
break ;
case 5 :
monto=500 ;
break ;
case 6 :
monto=600 ;
break ;
case 7 :
monto=1000 ;
break ;
}
} else
System.out.println ( “La casa gana” ) ;
monto = 0 ;
System.out.println ( “Desea volver a jugador [s/n] : ” ) ;
opc1=Lectura.leerChar ( ) ;
Pag. 76
Problema 197
Clase PrgMultiplicacion
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgMultiplicacion {
if ( resul1 == resul2 )
System.out.println ( “Respuesta correcta… Muy bien” ) ;
else
System.out.println ( “No es la respuesta correcta… Vuelva a intentarlo” ) ;
Pag. 77
Problema 198
Modificar el programa del problema anterior, de tal forma que se muestre un menú
de opciones donde permita sumar, restar, multiplicar y dividir dos números
generados al azar. Se permitirá al estudiante contestar la misma pregunta una y
otra vez hasta que responda correctamente.
Clase PrgMenuOperaciones1
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgMenuOperaciones1 {
do {
case 1 :
resul1 = valor1 + valor2 ;
operacion = “Suma” ;
signo = ‘+’ ;
break ;
Pag. 78
Continúa… Etapa 04 - Desarrollo de la Codificación.
Clase PrgMenuOperaciones1
case 2 :
resul1 = valor1 - valor2 ;
operacion = “Resta” ;
signo = ‘-’ ;
break ;
case 3 :
resul1 = valor1 * valor2 ;
operacion = “Multiplicación” ;
signo = ‘*’ ;
break ;
case 4 :
resul1 = valor1 / valor2 ;
operacion = “División” ;
signo = ‘/’ ;
break ;
case 5 :
System.exit (0) ;
break ;
}
do {
if ( resul1 != resul2 )
System.out.println ( “No es, por favor trata otra vez” ) ;
} while ( op != 5 ) ;
}
}
Pag. 79
Problema 199
Modificar el programa del problema anterior, de tal forma que se muestre un menú
de opciones donde permita sumar, restar, multiplicar y dividir dos números al azar.
Mostrar la cantidad de preguntas correctas y la cantidad de preguntas incorrectas.
Clase PrgMenuOperaciones2
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgMenuOperaciones2 {
do {
case 1 :
resul1 = valor1 + valor2 ;
operacion = “Suma” ;
signo = ‘+’ ;
break ;
Pag. 80
Continúa… Etapa 04 - Desarrollo de la Codificación.
Clase PrgMenuOperaciones2
case 2 :
resul1 = valor1 - valor2 ;
operacion = “Resta” ;
signo = ‘-’ ;
break ;
case 3 :
resul1 = valor1 * valor2 ;
operacion = “Multiplicación” ;
signo = ‘*’ ;
break ;
case 4 :
resul1 = valor1 / valor2 ;
operacion = “División” ;
signo = ‘/’ ;
break ;
case 5 :
System.exit (0) ;
break ;
}
if ( resul1 != resul2 ) {
System.out.println ( “No es, por favor trata otra vez” ) ;
cont1 ++ ;
} else {
System.out.println ( “Muy bien” ) ;
cont2 ++ ;
}
} while ( op != 5 ) ;
}
}
Pag. 81
Problema 200
Clase PrgAdivinarNumero1
package dominioDeLaAplicacion ;
import biblioteca.* ;
class PrgAdivinarNumero1 {
Pag. 82
Problema 201
Modificar el programa del problema anterior, de tal forma que se pueda ingresar la
cantidad de intentos que se tiene para adivinar el número.
Clase PrgAdivinarNumero2
package dominioDeLaAplicacion ;
Import biblioteca.* ;
class PrgAdivinarNumero2 {
do {
System.out.println ( “Ingresar número : ” ) ;
num = Lectura.leerInt ( ) ;
if (cont >= intentos ) {
System.out.println ( “Deberías haberlo hecho mejor” ) ;
valor = num ;
}
else if ( num < valor )
System.out.println ( “El número es demasiado chico. Pruebe otra vez” ) ;
Pag. 83
Pag. 84
MANEJO DE CADENAS: CLASE STRING
INTRODUCCIÓN
Ejemplo:
String nom = “Danae” ;
java.lang.Object
java.lang.String
La clase String permite manipular las variables de tipo texto o cadena a través
de los métodos que implementa (la clase String tiene métodos de instancia y
métodos de clase). La clase String incluye métodos que permiten examinar los
caracteres individuales de una cadena para compararlos, para ubicarlos, para
extraerlos como subcadenas, y para crear copias de una cadena convirtiendo
todos sus caracteres a letra mayúscula o minúscula.
Pag. 85
MÉTODOS
Métodos de instancia:
1. charAt( ).
2. compareTo( ).
3. concat( ).
4. endsWith( ).
5. equals( ).
6. equalsIgnoreCase( ).
7. indexOf( ).
8. lastIndexOf( ).
9. length( ).
10. matches( ).
11. replace( ).
12. split( ).
13. startsWith( ).
14. substring( ).
15. toCharArray( ).
16. toLowerCase( ).
17. trim( ).
18. toUpperCase( ).
Métodos de clase:
19. valueOf( ).
Pag. 86
A continuación se presenta una breve descripción del uso de cada uno de los
métodos de la clase String:
CLASE String
MÉTODOS DE
DESCRIPCIÓN USO
INSTANCIA
Si la cadena es alfabéticamente
menor que la cadena colocada
como parámetro, el método String cad1 = “Hola Danae”;
devuelve un número entero menor String cad2 = “Hola Pedro”;
que cero. Si las dos cadenas son int x = cad1.compareTo(cad2);
compareTo(String)
alfabéticamente iguales devuelve
un número cero y si la cadena es Resultado:
alfabéticmente mayor que la x < 0 (cad1<cad2).
cadena colocada como parámetro,
el método devuelve un entero
mayor que cero.
Pag. 87
MÉTODOS DE
DESCRIPCIÓN USO
INSTANCIA
String cad1 = “DANAE”;
Este método realiza la misma String cad2 = “Danae”;
función que el método equals ( ) boolean x;
equalsIgnoreCase(String) pero la comparación la realiza sin x = cad1.equalsIgnoreCase(cad2);
tener en cuenta las letras
minúscula y mayúscula. Resultado:
x = true.
Pag. 88
MÉTODOS DE
DESCRIPCIÓN USO
INSTANCIA
String cad1 = “Hola Danae”;
int x = cad1.lastIndexOf( “lo”,5 );
lastIndexOf(String,int)
Resultado:
x = 2.
Pag. 89
MÉTODOS DE
DESCRIPCIÓN USO
INSTANCIA
segundo parámetro del método.
String cad1 = “Hola Danae”;
String x = cad1.substring(6,9);
substring(int,int)
Resultado:
x = “ana”.
String.valueOf(boolean)
String.valueOf(int) double pi = 3.1416;
String.valueOf(long) Método de clase que permite String x = String.valueOf(pi);
String.valueOf(float) convertir los valores de otros tipos
String.valueOf(double) de datos o variables a una cadena.
String.valueOf(Object) resultado:
String.valueOf(char[ ]) x = “3.1416”.
String.valueOf(char[ ], int,int)
Pag. 90
Problema 202
Clase PrgConvertirMayuscula
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgConvertirMayuscula {
String nom ;
nom = nom.toUpperCase( ) ;
nom.toUpperCase ( ) ;
Nombre del método.
Operador punto.
Nombre de la variable
(objeto).
El método toUpperCase ( ) se utiliza con variables de tipo String y permite convertir en letras
mayúsculas el contenido de la variable que antecede al nombre del método y al operador punto (en
nuestro caso la variable nom). Como el método toUpperCase ( ) nos devuelve un valor de tipo String
(el contenido de la variable en letra mayúscula), podemos mostrar el resultado utilizando
Pag. 91
System.out.println o almacenarlo en una variable (que puede ser la variable que contenía la cadena
original), tal y como lo hemos realizado en nuestro ejemplo:
nom = nom.toUpperCase ( ) ;
Es importante tener presente que el método toUpperCase ( ) es un método que solo podemos utilizar
con variables de tipo String y su función es convertir el contenido de una variable en letras mayúscula.
Pag. 92
Problema 203
Clase PrgConvertirMinuscula
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgConvertirMinuscula {
String nom ;
nom = nom.toLowerCase( ) ;
nom.toLowerCase ( ) ;
Nombre del método.
Operador punto.
Nombre de la variable
(objeto).
El método toLowerCase ( ) se utiliza con variables de tipo String y permite convertir en letras
minúsculas el contenido de la variable que antecede al nombre del método y al operador punto (en
nuestro caso la variable nom). Como el método toLowerCase ( ) nos devuelve un valor de tipo String
(el contenido de la variable en letra minúscula), podemos mostrar el resultado utilizando
Pag. 93
System.out.println o almacenarlo en una variable (que puede ser la variable que contenía la cadena
original), tal y como lo hemos realizado en nuestro ejemplo:
nom = nom.toLowerCase ( ) ;
Es importante tener presente que el método toLowerCase ( ) es un método que solo podemos utilizar
con variables de tipo String y su función es convertir el contenido de una variable en letras minúscula.
Pag. 94
Problema 204
Clase PrgConcatenarNombres
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgConcatenarNombres {
nom1 = nom1.concat(espacio) ;
nombre = nom1.concat(nom2) ;
El método concat ( ) se utiliza para juntar o concatenar el contenido de dos variables de tipo String (la
misma función cumple el signo “+ “cuando trabaja con variables de tipo String).
Es decir, el contenido de la variable nom1 y el contenido de la variable espacio se juntan (o
concatenan) y el resultado se almacena en la variable que antecede al signo = (en nuestro caso la
misma variable nom1). Luego el contenido de la variable nom1 se junta con el contenido de la variable
nom2 y el resultado se almacena en la variable nombre.
Pag. 95
nombre = nom1.concat(nom2) ;
Esto permite juntar o concatenar los nombres del alumno con un espacio en blanco entre ellos en una
única variable de tipo String.
También podría visualizarse directamente el resultado de juntar o concatenar dos variables de tipo
String (cadenas) utilizando System.out.println, como se muestra a continuación:
Pag. 96
Problema 205
Clase PrgLongitudCadena
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgLongitudCadena {
int cant ;
String nom ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cant = nom.length( ) ;
nom = nom.trim ( ) ;
El método trim ( ) permite eliminar los espacios en blanco que pueden existir al inicio y/o al final de una
cadena contenida en una variable (en nuestro caso la cadena contenida en la variable nom). Esto se
realiza como precaución, ya que el usuario puede haber presionado la barra espaciadora antes de
ingresar el nombre del alumno y esto se almacena en la variable como espacios en blanco.
Pag. 97
cant = nom.length ( ) ;
El método length ( ) se utiliza con variables de tipo String y nos permite contar la cantidad de
caracteres que almacena una variable (en nuestro caso, la cantidad de caracteres que almacena la
variable nom). Como el método length ( ) devuelve la cantidad de caracteres que tiene una variable
(incluido los espacios en blanco), podemos mostrar el resultado utilizando System.out.println(),
utilizarlo en una condición lógica o almacenarlo en una variable. En nuestro ejemplo lo utilizamos como
condición lógica y para almacenarlo en una variable.
En la líneas de código mostradas a continuación, se consistencia el ingreso del nombre de tal forma
que no se permita ingresar un nombre que tenga menos de 2 caracteres (se asume que pueden haber
nombres de 2 caracteres o mas, como por ejemplo; Lu, Ana, José, Pedro, que tienen 2, 3, 4, y 5
caracteres respectivamente).
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim ( ) ;
if ( nom.length ( ) < 2 ) {
System.out.println ( “Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length ( ) < 2) ;
Pag. 98
Problema 206
Clase PrgConvertirMayuscula2
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgConvertirMayuscula2 {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while ( nom.length( ) < 2 ) ;
nom = nom.toUpperCase( ) ;
System.out.println ( “ El nombre en Mayúscula es: ” + nom ) ;
}
}
En la codificación de este programa, se debe eliminar los espacios en blanco que la variable nom
pueda tener al inicio y al final del dato que contiene, luego se consistencia que tenga por lo menos 2
caracteres y luego se convierte el contenido de la variable nom en letra mayúscula, para finalmente
mostrar su contenido por pantalla.
En consecuencia, se puede afirmar que esta solución es más óptima que la solución presentada en el
problema 100.
Pag. 99
Problema 207
Clase PrgPrimeroMayuscula
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgPrimeroMayuscula {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cadena1 = nom.substring(0,1) ;
cadena1 = cadena1.toUpperCase( ) ;
cadena2 = nom.substring(1) ;
nom = cadena1.concat(cadena2) ;
cadena1 = nom.substring(0,1) ;
cadena2 = nom.substring(1) ;
El método substring ( ) se utiliza de dos formas. La primera forma nos permite obtener una subcadena
desde una posición inicial hasta un caracter antes de la posición final indicada. La segunda forma nos
permite obtener una subcadena desde una posición determinada hasta el final de la cadena.
Pag. 100
Imagínese que la variable nom contiene el nombre “danae”, tal y como se muestra a continuación:
nom = “danae”.
Cuando manipulamos cadenas con el método substring ( ) debemos tener en cuenta que cada
caracter de la cadena tiene una determinada posición, empezando por la posición cero (0).
nom = “danae”.
posición 0
cadena1 = nom.substring(0,1) ;
Donde, el primer número del método substring ( ) indica la posición de la cadena nom desde donde va
a empezar la subcadena y el segundo número indica la posición final de la cadena (es importante
mencionar que se debe incluir hasta un caracter antes de la posición final indicada). Esto nos permite
solo obtener el primer caracter de nom (la letra “d”).
Suponiendo que se desee obtener la subcadena “ana” de la cadena “danae” contenida en la variable
nom, utilizaríamos la siguiente sentencia:
Continuando con nuestro ejemplo, una vez obtenida la primera letra del nombre se convierte a
mayúscula utilizando:
cadena1 = cadena1.toUpperCase ( ) ;
Ahora es necesario obtener el resto del contenido de la variable nom. Esto lo realizamos utilizando:
Esta es la segunda forma de utilizar el método substring ( ), donde el número (en nuestro caso el
número 1), indica la posición de la cadena nom donde va a comenzar la subcadena (la primera letra
“a”) hasta el final de la cadena.
Ahora en la variable cadena1 tenemos almacenada la letra “D” y en la variable cadena2 tenemos
almacenadas las letras “anae”. Para finalizar solo será necesario juntar o concatenar ambas variables
en la variable original nom, utilizando el método concat ( ).
Pag. 101
Problema 208
Clase PrgMayusculaMinuscula
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgMayusculaMinuscula {
int cant ;
String nom, cadena1 = “” , cadena2 = “” ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cadena1 = nom.substring(0,1) ;
cadena1 = cadena1.toUpperCase( ) ;
cadena2 = nom.substring(1) ;
cadena2 = cadena2.toLowerCase( ) ;
nom = cadena1.concat(cadena2) ;
System.out.println ( “ El nombre del alumno es: ” + nom ) ;
}
}
Observe el uso de los métodos trim ( ), length ( ), substring ( ) en sus dos formas, toUpperCase ( ),
toLowerCase ( ) y concat ( ) de la clase String.
En la codificación de este programa, se convierte en mayúscula la primera letra del nombre y el resto
se convierte en minúscula. Esto como precaución de que se ingrese todo el nombre en mayúscula o en
forma combinada entre letras mayúsculas y minúsculas. Finalmente siempre el nombre tendrá la
primera letra en mayúscula y el resto en letra minúscula.
En consecuencia, se puede afirmar que esta solución es más óptima que la solución presentada en el
problema 104.
Pag. 102
Problema 209
Clase PrgNombreCompleto
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgNombreCompleto {
public static void main(String [ ] args) {
int cant ;
String nom, cadena1 = “”,cadena2 = “”, caracter ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2) ;
cant = nom.length( ) ;
for (int x=0; x<cant; x++) {
if ( x==0) {
cadena1 = nom.substring(0,1) ;
cadena1 = cadena1.toUpperCase( ) ;
cadena2 = nom.substring(1) ;
cadena2 = cadena2.toLowerCase( ) ;
nom = cadena1.concat(cadena2) ;
} else {
caracter = nom.substring(x, x+1) ;
if (caracter.equals ( “ ” ) ) {
cadena1 = nom.substring(0,x+1) ;
caracter = nom.substring(x+1, x+2) ;
caracter = caracter.toUpperCase( );
cadena2 = nom.substring(x+2) ;
nom = cadena1 + caracter + cadena2 ;
}
}
}
System.out.println ( “ El nombre del alumno es: ” + nom ) ;
}
}
Pag. 103
¿Qué hay de nuevo en la codificación?
if (caracter.equals (“ “)) {
El método equals ( ) se utiliza con variables de tipo String y nos permite comparar el contenido de dos
cadenas (en nuestro caso la variable caracter con un espacio en blanco). Si al comparar el contenido
de las dos cadenas resulta que ambas variables son iguales, el método equals ( ) nos devuelve un
valor verdadero (true), en caso contrario nos devuelve un valor falso (false). Este valor devuelto se
evalúa en la estructura de decisión if.
Nosotros desearíamos que la primera letra de cada nombre y de cada apellido de un alumno este en
letra mayúscula, mientras que el resto de las letras estén en letra minúscula.
Al inicio utilizamos parte de la solución del problema 105. Después obtenemos caracter por caracter y
evaluamos si el caracter obtenido es un espacio en blanco. Si el caracter resulta ser un espacio en
blanco entonces se almacena y se convierte en letra mayúscula la letra siguiente al espacio en blanco.
El siguiente esquema muestra como se debe almacenar parcialmente el nombre del ejemplo en la
variable nom.
Después se concatenan las tres variables y se almacenan en la variable nom. El proceso se repite
hasta llegar al final de la cadena.
Ahora considere si entre los nombres existe más de un espacio en blanco. ¿Qué sucede? Modificando
la solución anterior para poder considerar la problemática anterior tendríamos la siguiente variación:
cant = nom.length( ) ;
sw = false ;
for (int x=0; x<cant; x++) {
if (x==0) {
cadena1 = nom.substring(0,1) ;
cadena1 = cadena1.toUpperCase( ) ;
cadena2 = nom.substring(1) ;
cadena2 = cadena2.toLowerCase( ) ;
nom = cadena1.concat(cadena2) ;
} else {
Pag. 104
caracter = nom.substring(x, x+1) ;
if (caracter.equals( “ ” ) ) {
sw = true ;
} else {
if (sw) {
cadena1 = nom.substring(0,x) ;
caracter = nom.substring(x, x+1) ;
caracter = caracter.toUpperCase( );
cadena2 = nom.substring(x+1) ;
nom = cadena1 + caracter + cadena2 ;
sw = false ;
}
}
}
}
En esta parte modificada de la solución se utiliza un centinela (o flag) que nos permite indicar el
momento preciso para realizar la conversión de la primera letra del nombre o apellido a letra
mayúscula, sin preocuparnos de la cantidad de espacios en blanco que pueda existir entre dos
nombres.
Pag. 105
Problema 210
Clase PrgLongitudCadenaBlanco
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgLongitudCadenaBlanco {
int x,cant,cont=0 ;
String nom,caracter ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
cant = nom.length( ) ;
for (x=0;x<cant;x++) {
caracter = nom.substring(x,x+1) ;
if (caracter.equals ( “ ” ) ) {
cont ++ ;
}
}
System.out.println ( “ La cantidad de espacios: ” + cont ) ;
}
}
Observe el uso de los métodos trim ( ), length ( ), substring ( ) y equals ( ) de la clase String.
En la codificación de este programa, se evalúa caracter por caracter (de la variable nom). Si el caracter
es igual a un espacio en blanco (“ “), se le aumenta uno a la variable cont (que esta trabajando como
contador de espacios encontrados en la variable nom).
Pag. 106
Problema 211
Clase PrgLongitudCadenaNoBlanco
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgLongitudCadenaNoBlanco {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cant = nom.length( ) ;
for (x=0; x<cant; x++) {
caracter = nom.substring(x,x+1) ;
if ( !caracter.equals ( “ ” ) ) {
cadena = cadena.concat(caracter) ;
}
}
cant = cadena.length( ) ;
System.out.println ( “ La cantidad de caracteres sin contar espacios: ” + cant ) ;
}
}
Observe el uso de los métodos trim ( ), length ( ), substring ( ) y equals ( ) de la clase String.
En la codificación de este programa, se evalúa caracter por caracter (de la variable nom). Si el caracter
no es un espacio en blanco se junta o concatena con los caracteres de la variable cadena (al inicio no
contiene ningún caracter). Al final se obtiene la longitud de la variable cadena, que equivale a la
cantidad de caracteres de la variable nom diferentes a espacios en blanco.
Pag. 107
Problema 212
Clase PrgLongitudCadenaBlancoNoBlanco
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgLongitudCadenaBlancoNoBlanco {
public static void main(String [ ] args) {
int x, cant, cont = 0 ;
String nom, caracter ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) < 2 ) ;
cant = nom.length( ) ;
fo r(x=0; x<cant; x++) {
caracter = nom.substring(x,x+1) ;
if (caracter.equals ( “ ” ) ) {
cont ++ ;
}
}
System.out.println ( “ La cantidad de espacios: ” + cont ) ;
System.out.println ( “ La cantidad de caracteres sin contar espacios: ” + ( cant - cont ) ) ;
}
}
En la codificación de este programa, se emplea la misma estrategia que la utilizada en la solución del
problema 108, para obtener el número de espacios en blanco contenidos en la variable nom. Al final se
obtiene la longitud total de la cadena nom y realizando una simple resta se obtiene el número de
caracteres de la variable nom que no son espacios en blanco.
Pag. 108
Problema 213
Clase PrgTotalVocales1
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTotalVocales1 {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) == 0 ) ;
cant = nom.length( ) ;
nom = nom.toLowerCase( ) ;
Pag. 109
¿Qué hay de nuevo en la codificación?
nom.charAt (x) ;
El método charAt ( ) se utiliza con variables de tipo String y nos permite obtener un caracter de una
cadena. En nuestro caso, obtenemos un caracter de la variable nom y lo almacenamos en una variable
de tipo char (el método charAt ( ) devuelve un caracter).
c = nom.charAt (x) ;
El caracter obtenido es evaluado para determinar si es o no una vocal. Esta evaluación se realiza a
través de los códigos ASC correspondientes a las vocales (es importante mencionar que la evaluación
de una variable de tipo char se puede realizar utilizando los códigos ASC equivalentes a los caracteres
especiales, letras y números).
Antes de iniciar la evaluación de cada uno de los caracteres de la variable nom, se utiliza el método
toLowerCase ( ) para asegurarnos de convertir a letras minúsculas todos los caracteres de la variable
nom y luego utilizar los códigos ASC equivalentes a las vocales en minúscula.
Modifique la solución anterior de tal forma que pueda determinar cuantas vocales almacenadas en la
variable son a, e, i, o y u (en forma independiente).
Pag. 110
Problema 214
Clase PrgTotalVocalesNoVocales
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTotalVocalesNoVocales {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while (nom.length( ) == 0 ) ;
cant = nom.length( ) ;
nom = nom.toLowerCase( ) ;
Pag. 111
Este programa es similar al programa desarrolado en el problema 111. La diferencia es que se obtiene
el total de caracteres que tiene la variable y se resta del total de vocales que tiene, para poder obtener
el total de caracteres que no son vocales.
Modifique la solución anterior de tal forma que pueda determinar cuántas vocales almacenadas en la
variable nom son mayúsculas y cuántas son minúsculas. También puede modificar la solución de tal
forma que permita determinar cuántas consonantes contiene la variable nom. Recuerde utilizar los
equivalentes en código ASC de las consonantes en letra minúscula o en letra mayúscula.
Pag. 112
Problema 215
Clase PrgCadenaSubcadena
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCadenaSubcadena {
do {
System.out.println ( “ Ingresar una cadena: ” ) ;
cad1 = Lectura.leerString( ) ;
cad1 = cad1.trim( ) ;
if (cad1.length( ) == 0 ) {
System.out.println ( “ Cadena ingresada no válido... Reintente! ” ) ;
}
} while (cad1.length( ) == 0 ) ;
do {
System.out.println ( “ Ingresar una subcadena de la primera cadena: ” ) ;
cad2 = Lectura.leerString( ) ;
cad2 = cad2.trim( ) ;
if (cad2.length( ) == 0) {
System.out.println ( “ Cadena ingresada no válida... Reintente! ” ) ;
}
} while (cad2.length( ) == 0 ) ;
Pag. 113
Continúa... Etapa 04 - Desarrollo de la codificación.
Clase PrgCadenaSubcadena
} else {
if (cad1.equals (cad2) ) {
System.out.println ( “ las cadenas son iguales ” ) ;
} else {
System.out.println ( “ la segunda cadena no debe tener una longitud ” ) ;
System.out.println ( “ mayor que la primera cadena ” ) ;
}
}
}
}
Observe el uso de los métodos trim ( ), length ( ), substring ( ) y equals ( ) de la clase String.
En primer lugar, se verifica que la primera cadena (cad1) tenga una longitud mayor que la segunda
cadena (cad2). Luego, se obtiene la diferencia entre las longitudes de cad1 y cad2, y se almacena en
la variable total. El límite para la evaluación del número de veces que se repite cad2 en cad1, es el
caracter ubicado en la posición total de cad2. Después, empezando desde el primer caracter de cad1
se extrae una subcadena (subcad) del mismo tamaño que cad2 y se comparan para ver si son iguales
utilizando el método equals ( ). Si son iguales el contador cont aumenta en 1. Este proceso se repite
utilizando el siguiente caracter de cad1.
Pag. 114
En primer lugar determinamos que cad1 tiene una longitud mayor que cad2. Luego, calculamos
el valor de la variable total (total = 5-3 = 2).
Pag. 115
El límite para la evaluación del número de veces que se repite cad2 en cad1 es el caracter ubicado en
la posición 2 de cad2.
cad1 = “Danae”
0 12
Segunda evaluación:
cad2 = “ana” y subcad = “ana”
Resultado: verdadero (cont =1).
Primera evaluación:
cad2 = “ana” y subcad = “nae”
Resultado: falso. Finalmente, se concluye que cad2
se repite una vez en cad1.
Pag. 116
Problema 216
Clase PrgNombresIguales
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgNombresIguales {
public static void main(String [ ] args) {
String nom1, nom2 ;
do {
System.out.println ( “ Ingresar el nombre del primer alumno: ” ) ;
nom1 = Lectura.leerString( ) ;
nom1 = nom1.trim( ) ;
if ( nom1.length( ) < 2 ) {
System.out.println("Nombre ingresado no válido… Reintente! ");
}
} while ( nom1.length( ) < 2 ) ;
do {
System.out.println ( “ Ingresar el nombre del segundo alumno: ” ) ;
nom2 = Lectura.leerString( ) ;
nom2 = nom2.trim( ) ;
if ( nom2.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while ( nom2.length( ) < 2 ) ;
if ( nom1.equals (nom2) ) {
System.out.println ( “ Los nombres ingresados son iguales ” ) ;
} else {
System.out.println ( “ Los nombres ingresados son diferentes ” ) ;
}
}
}
Se comparan dos variables de tipo cadena (nom1 y nom2 respectivamente) y se determinan si ambas
cadenas son iguales o no.
Pag. 117
Problema 217
Clase PrgOrdenados1
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados1 {
if (nombre1.compareTo(nombre2) < 0 ) {
nombreMenor = nombre1 ;
nombreMayor = nombre2 ;
} else {
nombreMenor = nombre2 ;
nombreMayor = nombre1 ;
}
System.out.println ( “ ------------------------------------------------- ” ) ;
System.out.println ( “ Nombres ordenados alfabéticamente ” ) ;
System.out.println ( “ ------------------------------------------------- ” ) ;
System.out.println (nombreMenor) ;
System.out.println (nombreMayor) ;
}
}
nombre1.compareTo (nombre2) ;
El método compareTo ( ) permite comparar dos variables de tipo String. El método permite compareTo
( ) nos devuelve un valor entero. Si el valor devuelto es igual a cero (0), entonces las cadenas son
iguales, es decir; las variables nombre1 y nombre2 contiene cadenas iguales. Si el valor devuelto es
Pag. 118
mayor que cero (0), entonces la variable nombre1 es mayor que la variable nombre2. Finalmente, si el
valor devuelto es menor que cero, entonces la variable nombre1 es menor que la variable nombre2.
Cuando se comparan dos cadenas, se realiza una comparación alfabética en la cual tienen significado
las letras mayúsculas, las letras minúsculas, los caracteres especiales y los espacios en blanco.
En base a esto, mejore la solución de tal forma que se pueda realizar la consistencia de los nombres
ingresados.
Pag. 119
Problema 218
Clase PrgOrdenados2
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados2 {
do {
System.out.println ( “ Ingrese el nombre de la primera persona: ” ) ;
nombre1 = Lectura.leerString( );
nombre1 = nombre1.trim( ) ;
if (nombre1.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while (nombre1.length( ) < 2 ) ;
do {
System.out.println ( “ Ingrese el nombre de la segunda persona: ” ) ;
nombre2 = Lectura.leerString( ) ;
nombre2 = nombre2.trim( ) ;
if ( nombre2.length( ) < 2 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre2.length( ) < 2 ) ;
if ( nombre1.compareTo(nombre2) < 0 ) {
nombreMenor = nombre1 ;
nombreMayor = nombre2 ;
} else {
nombreMenor = nombre2 ;
nombreMayor = nombre1 ;
}
Pag. 120
Continúa... Etapa 04 - Desarrollo de la codificación.
Clase PrgOrdenados2
System.out.println ( “------------------------------------------------- ” ) ;
System.out.println ( “Nombres ordenados alfabéticamente ” ) ;
System.out.println ( “------------------------------------------------- ” ) ;
System.out.println (nombreMenor) ;
System.out.println (nombreMayor) ;
}
}
Mejore la codificación del programa, de tal forma que se contemple la posibilidad que los nombres
ingresados sean iguales.
Pag. 121
Problema 219
Clase PrgOrdenados3
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados3 {
do {
System.out.println ( “ Ingrese el nombre de la primera persona: ” ) ;
nombre1 = Lectura.leerString( ) ;
nombre1 = nombre1.trim( ) ;
if ( nombre1.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre1.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la segunda persona: ” ) ;
nombre2 = Lectura.leerString( ) ;
nombre2 = nombre2.trim( ) ;
if ( nombre2.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while (nombre2.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la tercera persona: ” ) ;
nombre3 = Lectura.leerString( ) ;
nombre3 = nombre3.trim( ) ;
if ( nombre3.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre3.length( ) == 0 ) ;
Pag. 122
Continúa... Etapa 04 - Desarrollo de la codificación.
Clase PrgOrdenados3
Pag. 123
Pag. 124
Problema 220
Clase PrgOrdenados4
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados4 {
do {
System.out.println ( “ Ingrese el nombre de la primera persona: ” ) ;
nombre1 = Lectura.leerString( ) ;
nombre1 = nombre1.trim( ) ;
if (nombre1.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre1.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la segunda persona: ” ) ;
nombre2 = Lectura.leerString( ) ;
nombre2 = nombre2.trim( ) ;
if (nombre2.length( ) == 0) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while ( nombre2.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la tercera persona: ” ) ;
nombre3 = Lectura.leerString( ) ;
nombre3 = nombre3.trim( ) ;
if ( nombre3.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
}
} while (nombre3.length( ) == 0 ) ;
Pag. 125
Continúa... Etapa 04 - Desarrollo de la codificación.
Clase PrgOrdenados4
if ( nombre1.compareTo(nombre2) < 0 ) {
if ( nombre1.compareTo(nombre3) < 0 ) {
nom01 = nombre1 ;
if (nombre2.compareTo(nombre3) < 0 ) {
nom02 = nombre2 ;
nom03 = nombre3 ;
} else {
nom02 = nombre3 ;
nom03 = nombre2 ;
}
} else {
nom01 = nombre3 ;
nom02 = nombre1 ;
nom03 = nombre2 ;
}
} else {
if ( nombre2.compareTo(nombre3) < 0 ) {
nom01 = nombre2 ;
if ( nombre1.compareTo(nombre3) < 0 ) {
nom02 = nombre1 ;
nom03 = nombre3 ;
} else {
nom02 = nombre3 ;
nom03 = nombre1 ;
}
} else {
nom01 = nombre3 ;
nom02 = nombre2 ;
nom03 = nombre1 ;
}
}
System.out.println ( “ ------------------------------------------------- ” ) ;
System.out.println ( “ Nombres ordenados alfabéticamente ” ) ;
System.out.println ( “ ------------------------------------------------- ” ) ;
System.out.println (nom01) ;
System.out.println (nom02) ;
System.out.println (nom03) ;
}
}
Compruebe lo que sucede. Se ordenarán primero los nombres que comiencen con mayúscula y luego
los nombres que comiencen con minúscula.
Modifique el programa de tal forma que se cambie la primera letra del nombre ingresado a mayúscula.
Pag. 126
Problema 221
Clase PrgOrdenados5
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenados5 {
do {
System.out.println ( “ Ingrese el nombre de la primera persona: ” ) ;
nombre1 = Lectura.leerString( ) ;
nombre1 = nombre1.trim( ) ;
if ( nombre1.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
} else {
nombre1 =
((nombre1.substring(0, 1)).toUpperCase()).concat(nombre1.substring(1)) ;
}
} while ( nombre1.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la segunda persona: ” ) ;
nombre2 = Lectura.leerString( ) ;
nombre2 = nombre2.trim( ) ;
if ( nombre2.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
} else {
nombre2 =
((nombre2.substring(0, 1)).toUpperCase()).concat(nombre2.substring(1)) ;
}
} while ( nombre2.length( ) == 0 ) ;
do {
System.out.println ( “ Ingrese el nombre de la tercera persona: ” ) ;
nombre3 = Lectura.leerString( ) ;
nombre3 = nombre3.trim( ) ;
Pag. 127
Continúa... Etapa 04 - Desarrollo de la codificación.
Clase PrgOrdenados5
if ( nombre3.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido...Reintente!!! ” ) ;
} else {
nombre3 =
((nombre3.substring(0, 1)).toUpperCase()).concat(nombre3.substring(1)) ;
}
} while ( nombre3.length( ) == 0 ) ;
if ( nombre1.compareTo(nombre2) < 0 ) {
if ( nombre1.compareTo(nombre3) < 0 ) {
nom01 = nombre1 ;
if ( nombre2.compareTo(nombre3) < 0 ) {
nom02 = nombre2 ;
nom03 = nombre3 ;
} else {
nom02 = nombre3 ;
nom03 = nombre2 ;
}
} else {
nom01 = nombre3 ;
nom02 = nombre1 ;
nom03 = nombre2 ;
}
} else {
if ( nombre2.compareTo(nombre3) < 0 ) {
nom01 = nombre2 ;
if ( nombre1.compareTo(nombre3) < 0 ) {
nom02 = nombre1 ;
nom03 = nombre3 ;
} else {
nom02 = nombre3 ;
nom03 = nombre1 ;
}
} else {
nom01 = nombre3 ;
nom02 = nombre2 ;
nom03 = nombre1 ;
}
}
System.out.println ( “ Nombres ordenados alfabéticamente ” ) ;
System.out.println (nom01) ;
System.out.println (nom02) ;
System.out.println (nom03) ;
}
}
Mejore la solución desarrollando un programa que permita ingresar tres nombres de alumnos.
Asegúrese que los nombres ingresados empiecen con una letra mayúscula y que el resto de las letras
de los nombres estén en minúscula. Muestre los nombres ordenados alfabéticamente.
Luego, complemente la solución permitiendo el ingreso de los nombres de todos los alumnos de un
determinado salón de clase.
Pag. 128
Problema 222
Clase PrgCadenaModifcada
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCadenaModifcada {
int cant ;
String nom, dato1, dato2, caracter, cadena= “” ;
cant = nom.length( ) ;
Pag. 129
nombre1.equals (nombre2) ;
El método equals ( ) devuelve true (verdadero) si la cadena coincide con la cadena colocada como
parámetro del método equals ( ), caso contrario devuelve false (falso).
Por lo que en este caso el método equals ( ) evalúa a la variable dato1 y a la variable caracter. La
variable caracter tuvo que declararse como String para poder ser utilizada por el método equals ( ) de
esta forma:
La sentencia if puede evaluar una condición lógica, una variable booleana o el resultado de una
operación. En nuestro caso, el método equals ( ) devuelve true (verdadero) o false (falso),
dependiendo del resultado de la comparación entre las variables dato1 y caracter.
En base a esto, podemos afirmar que las siguientes sentencias en Java son equivalentes:
if ( dato1.equals (caracter) )
Resulta evidente que no es necesario realizar comparaciones booleanas dentro de las condiciones
lógicas utilizadas en la sentencia if (esto se hace extensivo a las sentencias do, while y for).
Pag. 130
Problema 223
Clase PrgIntercambioCadena
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgIntercambioCadena {
public static void main(String [ ] args) {
int num, cant;
String dato1, dato2, dato3, cadena = "";
do {
System.out.print(" Ingresar un numero mayor de 3 dígitos: ");
num = Lectura.leerInt();
String.valueOf (num) ;
El método valueOf ( ) se utiliza directamente con la clase String (y no con una variable de
tipo String). Este método permite convertir una variable de cualquier tipo a una variable de
tipo String o cadena. En nuestra solución convertimos la variable num a String con la
finalidad de poder manipular el contenido de la variable con métodos de la clase String.
Una vez convertida la variable num, se utiliza el método substring ( ) para intercambiar las
posiciones deseadas.
Pag. 131
Problema 224
Clase PrgInvertirCadena
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgInvertirCadena {
int cant, x ;
String nom, caracter, cadena = “” ;
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) == 0 ) {
System.out.println ( “ Nombre ingresado no válido… Reintente! ” ) ;
}
} while ( nom.length( ) == 0 ) ;
cant = nom.length( );
En este programa, declaramos la variable caracter como una cadena (String). Cada vez que se ejecuta
la sentencia for, se obtiene de la variable nom un caracter empezando desde el último y terminando en
el primero. Cada vez que se obtiene un caracter este se agrega a la variable cadena, de tal forma que
Pag. 132
al finalizar la ejecución de la sentencia for se tiene almacenado en la variable cadena el nombre
ingresado con los caracteres finales al inicio y los caracteres iniciales al final.
Es importante indicar que para esta solución, la variable caracter debe declararse como char. Observe
como se utiliza el método charAt ( ) de la clase String, con la finalidad de obtener caracter por caracter
de la variable nom (empezando desde el último y terminando en el primero), para agregarlos a la
variable cadena utilizando el signo “+” (concatenación).
Pag. 133
Problema 225
Clase PrgCuentaLetras1
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgCuentaLetras1 {
Mejore la solución desarrollando un programa que permita ingresar los nombres de todos los alumnos.
Utilice la estructura do… while. Asegúrese que los nombres ingresados empiecen con una letra
mayúscula y que el resto de las letras de los nombres estén en minúscula.
Pag. 134
Problema 226
Desarrollar un programa en Java que permita ingresar los nombres de todos los
empleados de una empresa. Mostrar el número de vocales que existen en cada
uno de los nombres ingresados.
Clase PrgTotalVocales2
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgTotalVocales2 {
public static void main(String [ ] args) {
int cant, cont=0, opc, d=0, x ;
String nom ;
char c = ‘ ’ ;
do {
do {
System.out.println ( “ Ingresar el nombre: ” ) ;
nom = Lectura.leerString( ) ;
nom = nom.trim( ) ;
if ( nom.length( ) == 0 ) {
System.out.println ( “ Nombre no válido… Reintente! ” ) ;
}
} while ( nom.length( ) == 0 ) ;
cant = nom.length( ) ;
nom = nom.toLowerCase( ) ;
for ( x=0; x<cant; x++ ) {
c = nom.charAt(x) ;
d = (int) (c) ;
switch(c) {
case 97 : // a
case 101 : // e
case 105 : // i
case 111 : // o
case 117 : cont ++ ; // u
}
}
System.out.println ( “ El Total de Vocales del nombre ingresado es: ” + cont ) ;
System.out.println ( “ Desea ingresar otro nombre (Sí = 1, No = 2): ” ) ;
opc =Lectura.leerInt( ) ;
} while ( opc != 1 ) ;
}
}
Pag. 135
Mejore la solución desarrollando un programa que considere el conteo de las vocales acentuadas y las
vocales en letra mayúscula. Como sugerencia investigue los códigos ASCII de las vocales acentuadas
y las vocales en letra mayúscula, y agréguelos en la sentencia switch ( ).
Pag. 136
Problema 227
Desarrollar un programa en Java que permita ingresar los nombres de todos los
productos de una determinada tienda. Mostrar como resultado las posiciones
pares.
Clase PrgProductosTienda
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgProductosTienda {
do {
System.out.println ( “ Ingresar la cantidad de productos: ” ) ;
cantidad = Lectura.leerInt( ) ;
if ( cantidad < 1 ) {
System.out.println ( “ Cantidad no válida… Reintente! ” ) ;
}
} while ( cantidad < 1 ) ;
do {
if ( x % 2 == 0 ) {
acum = acum + producto.substring(x - 1, x) ;
}
}
System.out.println ( “ Las posiciones pares del producto son: ” + acum ) ;
acum = “” ;
cont ++ ;
}
}
Pag. 137
Análisis de la solución
Luego, se utiliza una sentencia do para ingresar el nombre de cada uno de los productos y determinar
sus posiciones pares. Esto último se logra utilizando una sentencia for dentro de la sentencia do.
Observe el uso de los métodos length ( ) y substring ( ) de la clase String, y la forma como se utilizan
las estructuras lógicas para la solución del problema.
Pag. 138
Problema 228
Desarrollar un programa en Java que permita ingresar los nombres de todos los
alumnos de un salón de clase. Mostrar la longitud de cada nombre ingresado, el
nombre que tiene la mayor longitud y el nombre que tiene la menor longitud.
Clase PrgLongitudNombre
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgLongitudNombre {
do {
System.out.println ( “ Ingresar la cantidad de alumnos: ” ) ;
cantidad = Lectura.leerInt( ) ;
if ( cantidad < 1 ) {
System.out.println ( “ Cantidad no válida… Reintente! ” ) ;
}
} while ( cantidad < 1 ) ;
do {
System.out.println ( “ Ingresar el nombre del alumno: ” ) ;
alumno = Lectura.leerString( ) ;
System.out.println ( “ La Longitud es: ” + alumno.length( ) ) ;
if ( longMayor < alumno.length( ) ) {
longMayor = alumno.length( ) ;
nomMayor = alumno ;
}
if ( longMenor > alumno.length( ) ) {
longMenor = alumno.length( ) ;
nomMenor = alumno ;
}
cont ++ ;
} while ( cantidad != cont ) ;
Pag. 139
Análisis de la solución
Luego, se utiliza una sentencia do para ingresar el nombre de cada uno de los alumnos, y se
determina la longitud de cada nombre ingresado, el nombre con la mayor longitud y el nombre con la
menor longitud.
Observe el uso de los métodos length ( ) de la clase String, y la forma como se utilizan las estructuras
lógicas para la solución del problema.
Pag. 140
Problema 229
Desarrollar un programa en Java que permita ingresar una fecha con el siguiente
formato “dd-mm-aaaa” y validarla.
Clase PrgFechaFormato
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgFechaFormato {
if ( fecha.length( ) <= 10 ) {
dia = fecha.substring(0, 2) ;
num1 = Integer.parseInt(dia) ;
mes = fecha.substring(3, 5) ;
num2 = Integer.parseInt(mes) ;
anio = fecha.substring(6, 10) ;
if ( ( dia.length() != 2 ) || ( num1 < 31 ) ) {
System.out.println ( “ El dia ingresado es incorrecto ” ) ;
} else {
if ( (mes.length() != 2 ) || ( num2 < 12 ) ) {
System.out.println ( “ El mes ingresado es incorrecto ” ) ;
} else {
if ( anio.length( ) != 4 ) {
System.out.println ( “ El año ingresado esta incorrecto ” ) ;
} else {
System.out.println ( “ La fecha ingresada es correcta ” ) ;
}
}
}
}
}
}
Intente mejorar la solución validando la fecha, de tal forma que el mes ingresado sólo sea válido si es
que la variable dia contiene el número de días válidos para dicho mes. Incluya la posibilidad que el
mes de febrero sea bisiesto.
Pag. 141
Problema 230
Ejemplo:
Se ingresa:
Longitud = 10
Cadena = “Danae”
Resultado:
Cadena = “Danae*****”
Clase PrgCompletarCadenaIzq
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgCompletarCadenaIzq {
String cadena ;
int longitud, tamaño, x ;
Pag. 142
Problema 231
Ejemplo:
Se ingresa:
Longitud = 10
Cadena = “Danae”
Resultado:
Cadena = “*****Danae”
Clase PrgCompletarCadenaDer
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgCompletarCadenaDer {
String cadena ;
int longitud, tamaño, x ;
Pag. 143
Problema 232
Clase PrgArregloCadena
package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgArregloCadena {
}
}
El método valueOf ( ) se utiliza directamente con la clase String (y no con una variable de tipo String).
Este método permite convertir un arreglo de caracteres o parte de él, en una variable de tipo String o
cadena. En nuestra solución convertimos parte del arreglo arregloA a un String con la finalidad de
mostrar el contenido de dicha variable.
Observe que en este método, en primer lugar, se especifica el arreglo de tipo char del cual se va ha
obtener la cadena. En segundo lugar, se indica la posición del arreglo desde el cual se van a tomar los
datos y finalmente, se indica la longitud o el número de caracteres que se van a obtener del arreglo.
En el ejemplo, se muestra como resultado la cadena “ana”.
Pag. 144
Ejemplos de uso del método matches de la clase String de Java
Problema 233
String letras ;
do {
letras = LE.leerString ( “Ingrese 1 sola letra: ” ) ;
if ( ! letras.matches ( “[a-z-A-Z]” ) ) {
LE.mostrarError ( “Error; la letra ingresada es incorrecta; reintente” ) ;
}
Problema 234
String letras ;
do {
letras = LE.leerString ( “Ingrese varias letras: ” ) ;
if ( ! letras.matches ( “[a-z-A-Z]+” ) ) {
LE.mostrarError ( “Error; las letras ingresadas son incorrectas; reintente” ) ;
}
} while ( ! letras.matches ( “[a-z-A-Z]+” ) ) ;
Pag. 145
Problema 235
String letras ;
do {
letras = LE.leerString ( “Ingrese 3 letras: ” ) ;
if ( ! letras.matches ( “[a-z-A-Z]{3}” ) ) {
LE.mostrarError ( “Error; las letras ingresadas son incorrectas; reintente” ) ;
}
} while ( ! letras.matches ( “[a-z-A-Z]{3}” ) ) ;
Problema 236
String letras ;
do {
letras = LE.leerString ( “Ingrese sus dos nombres: ” ) ;
Problema 237
do {
numeros = LE.leerString ( “Ingrese un número de un dígito: ” ) ;
if ( ! numeros.matches ( “[0-9]” ) ) {
LE.mostrarError ( “Error; el número ingresado es incorrecto; reintente” ) ;
}
} while ( ! numeros.matches ( “[0-9]” ) ) ;
Pag. 146
Problema 238
String numeros ;
do {
numeros = LE.leerString ( “Ingrese un número: ” ) ;
if ( ! numeros.matches ( “[0-9]+” ) ) {
LE.mostrarError ( “Error; el número ingresado es incorrecto; reintente" ) ;
}
} while ( ! numeros.matches ( “[0-9]+” ) ) ;
Problema 239
do {
numeros = LE.leerString ( “Ingrese un número: ” ) ;
if ( ! numeros.matches ( “[0-9]{3}” ) ) {
LE.mostrarError ( “Error; el número ingresado es incorrecto; reintente ” ) ;
}
} while ( ! numeros.matches ( “[0-9]{3}” ) ) ;
Problema 240
do {
cadena = LE.leerString ( “Ingrese 2 letras y un número: ” ) ;
if ( ! cadena.matches ( “[a-z-A-Z]{2}[0-9]{5}” ) ) {
LE.mostrarError ( “Error; el dato ingresado es incorrecto; reintente” ) ;
}
} while ( ! cadena.matches ( “[a-z-A-Z]{2}[0-9]{5}” ) ) ;
Pag. 147
Analizando la codificación, podemos deducir lo siguiente:
• 1er Argumento [a-z-A-Z]{2}
Permite el ingreso de 2 letras. Puede ser en mayúscula o en minúscula.
• 2do Argumento [0-9]{5}
Permite que posteriormente se ingresen 5 cifras de un número.
Problema 241
String sexo ;
do {
sexo = LE.leerString ( “Ingrese el sexo: F: Femenino | M: Masculino” ) ;
if ( ! sexo.matches ( “[FMfm]” ) ) {
LE.mostrarError ( “Error; el dato ingresado es incorrecto; reintente” ) ;
}
} while ( ! sexo.matches ( “[FMfm]” ) ) ;
Problema 242
String sexo ;
do {
sexo = LE.leerString ( “Ingrese el sexo: F: Femenino | M: Masculino” ) ;
Pag. 148
Problema 243
String sexo ;
do {
sexo = LE.leerString ( “Ingrese el sexo: F: Femenino | M: Masculino” ) ;
sexo = sexo.toUpperCase ( ) ;
Problema 244
String numTelefono ;
do {
numTelefono = LE.leerString ( “Ingrese el número de teléfono” ) ;
if ( ! numTelefono.matches ( “[0-9]{7}” ) ) {
LE.mostrarError ( “Error; el Nro. ingresado es incorrecto; reintente” ) ;
}
} while ( ! numTelefono.matches ( “[0-9]{7}” ) ) ;
• DNI.
• Número de teléfono celular.
Pag. 149
Problema 245
En este caso cabe recalcar que el argumento proporcionado para el funcionamiento del
método matches es para un tipo de correo que pueda poseer:
String Email ;
do {
Email = LE.leerString ( “Ingrese su e-mail: ” ) ;
Email = Email.toLowerCase ( ) ;
if ( ! Email.matches ( “[a-z-0-9-_]+[@][a-z]+[.][a-z]{3}” ) ) {
LE.mostrarError ( “Error; el tipo de correo valido es [email protected]; reintente” ) ;
}
} while ( ! Email.matches ( “[a-z-0-9-_]+[@][a-z]+[.][a-z]{3}” ) ) ;
Pag. 150