Programación
Programación
Programación
1. Conceptos básicos.
Estructura inicial de public class MiPrimerPrograma {
programa
public static void main (String [ ] args) {
algoritmo
}
}
4. Funciones.
Una función es un conjunto de instrucciones agrupadas bajo un nombre y con un objetivo
común, que se ejecuta al ser invocada. La definición de una función puede hacerse antes o
después del main( ).
Con esto evitamos la duplicidad del código y la dificultad en las modificaciones. Las
funciones se comportan de la siguiente manera:
1. Se ejecuta el código hasta que encuentra la llamada.
2. La ejecución salta a la definición de la función.
3. Se ejecuta el cuerpo de la función.
4. Cuando la ejecución del cuerpo termina retomamos el código sigue su función.
Ámbito de las Variables locales: que son las que se declaran en la propia función y no pueden
variables utilizarse fuera de ella.
Variables de bloques: siempre y cuando su nombre no coincida con una variables
declarada antes, fuera del bloque, ya que esto producirá un error.
Es más práctico implementar una función que se llame variosSaludos( ) a la que se le pasa el número
de veces que queremos saludar, si ejecutamos variosSaludos(7), saludará 7:
static void variosSaludos (int veces) {
for ( int i = 0; i < veces, i++) {
System.out.println ( “Hola.”);
}
}
Parámetros Para una función que calcula y muestra la suma de dos números, la llamada sería:
de entrada. int a = 3;
suma (a, 2); //muestra la suma de a ( que vale 3 ) más 2.
Cada dato utilizado en la llamada a una función será asignado a un parámetro de
entrada, especificado en la definición de esta:
tipo nombreFuncion( int a, int b ) {
cuerpo de la función
}
Los static void variosSaludos ( int veces ) {
parámetros int i;
de la función //disponemos de las variables locales: i y veces
toman su
// el valor de veces se determina en la llamada
valor en la
llamada for ( i = 0; i < veces ; i++) {
System.out.println ( “Hola.” );
}
}
Si invocamos la función con
variosSaludos (7); //7 se asigna al primer parámetro: veces
Cómo int a= 20
funciona el compruebaHora( a, 4, 2*b+1);
paso de void compruebaHora ( int hora, int minutos, int segundos ) {
parámetro por
…
valor o copia.
} // copia de valores hora= 20 , minutos= 4, segundos= (2*4+1)= 15;
// cualquier cambio en un parámetro de entrada dentro de la función no repercute en la
variable utilizada en la llamada, ya que se modifica una copia.
Sobrecarga de funciones.
Significa que dos o más funciones compartan el mismo identificador en un mismo programa.
// función sobrecargada
static int suma ( int a, int b ) {
int suma;
suma = a + b;
return ( suma );
}
// función sobrecargada
static double suma ( int a, double pesoA, int b, double pesoB) {
double suma;
suma = a * pesoA / (pesoA + pesoB) + b * pesoB / (pesoA + pesoB);
return (suma);
Si invocamos la función suma( ) de la forma: suma (2, 3) se ejecutará la primera versión y devolverá 5.
En cambio, si se llama suma (2, 0.25, 3, 0.75) devolverá 3,25.
Recursividad.
Cuando una función se invoca a sí misma, diremos que es una función recursiva. Hay que hacer un
mecanismo que detenga en algún momento la serie de llamadas recursivas, porque sino nos lleva a un
ciclo infinito de llamadas a la función.
Índices.
El índice es el número que se le asigna a cada elemento, para así diferenciar el lugar de
cada elemento. Empezando siempre desde cero hasta el número total de elementos menos
uno.
Si introducimos un índice que se encuentre fuera del rango el programa dará un error en
ejecución y finalizará.
Construcción de tablas.
Para declarar una variable. int edad[ ];
Para crear una variable. edad =new int [5];
Para inicializar solo static void fill (tabla, int desde, int hasta, tipo valor);
algunos elementos. static void fill (tabla, 3, 6, 18) // inicializa sólo el rango 3…6
Para mostrar una tabla. int edad[ ] = {8, 41, 37, 22, 19}
System.out.println ( Arrays.toString(edad))
Otra forma:
for (i = 0; i < edad.length; i++){ // recorremos toda la tabla
System.out.println(edad [i]); //mostramos cada elemento
Para ordenar una tabla. int edad[ ] = {8, 41, 37, 22, 19}
System.out.println ( Arrays.sort(edad));
// Ahora edad = [8, 19, 22, 37, 41]
Para buscar un elemento int indiceBusqueda=0; //índice que usamos para recorrer la tabla
en una tabla no ordenada. while (indiceBusqueda < edad.length && // no es el último elemento
edad[ induceBusqueda] !=claveBusqueda) { // y no encontrado
indiceBusqueda++; //incrementamos el índice de
}
if (indiceBusqueda < edad.length){
… //claveBusqueda se encuentra en la posición indiceBusqueda
} else { //el índice se ha salido de rango
… //no encontrado
}
Para buscar un elemento Arrays.binarySearch (tabla, int desde, int hasta, tipo clave Busqueda);
en solo un rango.
Para hacer una copia de Arrays.copyOfRange( tipo origen [ ], int desde, int hasta)
un rango de la tabla. int t [ ] = {7, 5, 3, 1, 0, -2}
int a [ ] = Arrays.copyOfRange (t, 1, 4); //a = [5, 3, 1]
System.arraycopy(tablaOrigen, int posOrigen, tablaDestino, int
posDestinio, int longitud); //copia la tablaDestino a partir de posDestino
los datos de la tablaOrigen, comenzando en posOrigen y el parámetro
longitud dice los elementos que se copiarán
Para añadir un elemento a edad = ArrayscopyOf (edad, edad.length+1); //la copia incrementa la
una tabla no ordenada. longitud
edad (edad.length-1) = nuevo;
Para eliminar un elemento int t [ ]= {12, 27, 33, 38, 72, 92};
en una tabla ordenada int aBorrar=new Scanner (System.in).nextInt();
//usamos el algoritmo de búsqueda dicotómica
int indiceBorrado = Arrays.binarySearch(t, aBorrar);
if (indiceBorrar >=0) {
//desplazamos los elementos posteriores a indiceBorrado
System.arraycopy (t, indiceBorrado+1, t, t.length- indiceBorrado - 1);
System.out.println{ Arrays.toString(t)); //mostramos
} else {
… //no podemos borrar nada, ya que no lo hemos encontrado
}
Arrays bidimensionales
6. Cadenas de caracteres.
Introducción.
El tipo char, que almacena un solo carácter, es insuficiente para manejar textos complejos
que se denominan cadenas de caracteres. Para manipular textos tenemos las clases
Character, que trabaja con un solo carácter y String, que trabaja con textos de cualquier
longitud, ubicadas en el paquete java.lang.
Char se define como una letra, un número, un ideograma o cualquier símbolo que se
escribe entre comillas simples (‘ ‘). El Unicode identifica cada carácter mediante un número
entero que se utiliza para símbolos que no se pueden escribir por teclado. El hecho de que
un carácter se identifique con un número crea una relación entre char e int asignando a
cada carácter un valor entero.
Secuencias de escape
\b Borrado a la izquierda \f Nueva página
Conversión char-int.
Existe una relación entre las dos variables, por ejemplo ‘a’ tiene asociado el code point
/u0061 que si lo pasamos a decimal obtenemos 97. Por ejemplo:
char c = ‘a’;
System.out.println((int) c)); //muestra 97
int e = 97;
System.out.println( (char) e); //muestra ‘a’;
Aritmética de caracteres.
La relación existente entre int y char en unicode permite realizar operaciones aritméticas
con ellos: System.out.println(‘a’ + 1); //se muestra una ‘b’ por pantalla.
Clase Character.
La clase Character amplía la funcionalidad del tipo char simplificando mucho el trabajo.
CLASIFICACIÓN DE CARACTERES.
- Dígitos: ‘0’, ‘1’, ‘2’, ‘3’, … .
- Letras: formado por los elementos del alfabeto, tanto en minúscula (‘a’, ‘b’, …) como
mayúscula (‘A’, ‘B’, …).
- Carácteres blancos: como espacio o el tabulador.
- Otros caracteres: signos de puntuación, matemáticos, … .
Métodos de la clase Character
boolean isDigit (char c): indica si el carácter c char c1= ‘8’, c2= ‘p’;
es un dígito. Devuelve true en caso afirmativo boolean b;
y false en caso contrario. b= Character.isDigit(c1); //b es true;
b= Character.isDigit(c2); //b es false;
boolean isSpaceChar (char c): devuelve true si Character.isSpaceChar(“ “); //devuelve true
es un espacio. Character.isSpaceChar(‘a’); //devuelve false
Clase String.
Una variable de tipo String almacenará una cadena de caracteres. Los literales carácter y
cadena se diferencian en el tipo de comillas utilizado; mientras ‘a’ es un carácter, “a” es una
cadena que está compuesta por un único carácter.
Comparación
Igualdad (==)
boolean equals (String otra): compara la cadena String cad1 = “Hola mundo”;
que invoca el método con otra. String cad2 = “Hola mundo”;
String cad3 =”HOLA MUNDO”;
boolean equalsIgnoreCase(String otraCadena): boolean iguales;
funciona igual que equals() pero sin distinguir iguales = cad1.equals(cad2) ;// true
mayúsculas y minúsculas. iguales = cad1.equals(cad3); //false
iguales =cad1. equalsIgnoreCase(cad2); //true
Obtención de caracteres.
Obtención de un carácter char charAt (int posicion): devuelve el carácter que ocupa el índice
posición que se le da.
String frase = “Hola como estás”;
Sout( frase.charAt( 4 ) ); //muestra ‘a’
Comprobaciones
Cadena vacía String cadena= “ “;
- boolean isEmpty( ): indica con un boolean true si está vacia y false en caso
contrario.
String cad1= “ “, cad2 = “Hola…”;
cad1.isEmpty(); //true
cad2.isEmpty(); //false