Resumen Lenguaje Java Métodos (Subprogramas) Tipos de Métodos: con resultado y tipo void Definición 1. Método con resultado, retorna un solo valor, equivalente a los subprogramas tipo función tipo_de_dato_a_retornar identificador (lista_de_parámetros_formales){ //instrucciones return valor_a_retornar; donde lista_de_parámetros_formales es una lista de declaración de variables separadas por comas. float area(float b, float h){ float valor; valor = b*h; return valor; float cubo(float x){ return x*x*x; 2. Método tipo void void identificador (lista_de_parámetros_formales){ //instrucciones void mensaje(string m){ System.out.println(m); Llamada identificador (lista_de_parámetros_actuales); donde lista_de_parámetros_actuales es una lista de variables separadas por comas. Los parámetros actuales deben coincidir en número y tipo con los parámetros formales
2 s float y = 15, x = 8; float c = area(y, x); // llamada al método area mensaje( hola mundo ); // llamada al método mensaje Sobrecarga de métodos (polimorfismo en la sobrecarga) Se habla de sobrecarga de métodos cuando se utiliza el mismo nombre para varios métodos de una misma clase, lo cual esta permitido siempre y cuando los métodos tengan diferente número o tipos de parámetros. Por ejemplo en la clase Math existen cuatro métodos abs para calcular el valor absoluto de un número. Arreglos En Java los índices son valores enteros comprendidos entre 0 y límite -1; siendo límite el número de elementos del arreglo. En Java, un arreglo es, básicamente, un objeto que apunta a un conjunto de otros objetos o tipos de datos primitivos. La única diferencia entre los arreglos y los objetos es que existe una sintaxis especial para hacer que los arreglos se comporten como los arreglos de otros lenguajes. Sin embargo, a diferencia de C y C++, en Java los arreglos no pueden cambiar de tamaño, ni se puede hacer un acceso fuera de los límites de un arreglo. Arreglos Unidimensionales (Vectores) a cc a[0] a[1] a[2] a[3] a[4] Declaración En Java existen dos formas de declarar vectores. Figura 1. Vector de 5 elementos En la primera se colocan los corchetes en el nombre de la variable, por ejemplo: int a[]; En la segunda forma, los corchetes se colocan en el tipo de dato del vector, por ejemplo: int[] a; El número de elementos del vector no forma parte de la declaración, sino que se define al crearlo.
3 Creación Los vectores se crean en memoria por medio de la palabra clave new. : nombrevector = new tipo[número de elementos]; : a = new int[5]; Declaración y creación en un solo paso Java permite la declaración y creación de un vector en una sola línea de código. tipo nombrevector[] = new tipo[número de elementos]; tipo []nombrevector = new tipo[número de elementos]; Observar que el número de elementos solo se coloca con el new. s int edades[] = new int [20]; // declara y crea un vector edades usando la primera forma int[] edades = new int [20]; // declara y crea un vector edades usando la segunda forma Creación e inicialización Java permite inicializar el arreglo al momento de crearlo. tipo nombrevector[] = {lista de valores de tipo, separados con comas; tipo[] nombrevector = {lista de valores de tipo, separados con comas; s char vocales [] = {'a', 'e', 'i', 'o', 'u'; boolean[] respuestas = { true, false, true, true, false ; String ciudades[] = { Maracay, Valencia, Caracas, Maracaybo ; float x[] = {12.5, 10.8, 20.4; int p[] = {1, 2, 3, 4, 5; La longitud del arreglo (número de elementos) se determina automáticamente a partir del número de valores existentes entre {
4 Acceso a los elementos nombrevector[indice] p[i]=i+1; Longitud física de un vector En Java los arreglos son objetos. Adicionalmente al conjunto de datos que almacenan tienen un campo dato denominado length, que almacena el número de elementos del arreglo. El acceso a este campo es de la forma: nombrevector.length, por ejemplo, para determinar el número de elementos del vector p: int numeroelementos = p.length; for (int i = 0; i < p.length; i++) p[i]= i+1; Asignación de un vector a otro vector En Java el nombre del arreglo es una referencia a la estructura de datos. Por ejemplo: p ccc 1 2 3 4 5 5 p[0] p[1] p[2] p[3] p[4] length Las instrucciones: int x[]; x = p; Tienen el efecto de asignar el valor de la referencia p a la referencia x, de tal modo que tanto x como p referencian el mismo arreglo. Arreglos Bidimensionales (Matrices) Declaración En Java existen dos formas de declarar matrices. En la primera se colocan los corchetes en el nombre de la variable, por ejemplo: int a[][]; En la segunda forma, los corchetes se colocan en el tipo de dato de la matriz, por ejemplo: int[][] a; El número de elementos del arreglo no forma parte de la declaración, sino que se define al crearlo.
5 Creación Los arreglos se crean en memoria por medio de la palabra clave new. nombrematriz = new tipo[número de filas][número de columnas]; a = new int[5][6]; // crea una matriz de 5 filas x 6 columnas de elementos int Declaración y creación en un solo paso tipo nombrematriz[][] = new tipo[número de filas][número de columnas]; tipo[][] nombrematriz = new tipo[número de filas][número de columnas]; Observar que el número de elementos solo se coloca con el new. s // declara y crea una matriz ventas usando la primera forma int ventas[][] = new int [20][12]; // declara y crea una matriz ventas usando la segunda forma int[][] ventas = new int [20][12]; Creación e inicialización Java permite inicializar la matriz al momento de crearla. tipo nombrematriz[][] = {{lista_valores_de_fila_0, {lista_valores_fila 1,..; tipo[][] nombrematriz = {{lista_valores_de_fila_0, {lista_valores_fila 1,..; // Crea e inicializa una matriz de 4 filas por 3 columnas de elementos tipo int int mat[][] = {{1, 2, 3, {4, 5, 6, {7, 8, 9, {10, 11, 12; El número de elementos se determina automáticamente a partir del número de valores existentes entre { Acceso a los elementos nombrematriz[indice_fila][indice_columna] ventas[0][0] = 1; // asigna un valor 1 al elemento de la fila 0 columna 0
6 Longitud física Número de filas de una matriz nombrematriz.length Número de columnas de una fila nombrematriz[indice_fila].length int ventas[][] = new int[20][12]; for (int i = 0; i < ventas.length; i++) for (int j = 0; j < ventas[i].length; j++) ventas[i][j] = (int)(math.random()*100); Asignación de una matriz a otra matriz En Java el nombre del arreglo es una referencia a la estructura de datos. Por ejemplo: p p[0] p[0][0] P[0][1] P[0][2] Fila 0 p[1] p[1][0] p[1][1] P[1][2] Fila 1 Columna 0 Columna 1 Columna 2 Las instrucciones: int x[][]; x = p; Tienen el efecto de asignar el valor de la referencia p a la referencia x, de tal modo que tanto x como p referencian la misma matriz. p[0] referencia a los elementos de la fila 0, p[1] referencia a los elementos de la fila 1 Arreglos como parámetros formales de métodos En la definición del método, de forma similar a la declaración de arreglos, por ejemplo: void escribir(int x[]){ //instrucciones void transpuesta (float a[][]){ // instrucciones
7 Arreglos como parámetros actuales de métodos En la llamada al método, se coloca el nombre del arreglo que se está pasando como parámetro actual, por ejemplo, para los métodos escribir y transpuesta, una llamada podría ser: int edades[] = new int[100]; escribir(edades); float a[][]= new float[3][4]; transpuesta(a); Ejercicio de Aplicación /* * ArreglosMetodos.java * * Created on 29 de marzo de 2006, 11:50 AM */ package CompAvanz12006.Unidad1.metodosArreglos; /** * Esta clase permite visualizar la definición y uso de métodos static, * sobrecarga de métodos, * así como también el manejo de arreglos * @author mdeabreu */ public class ArreglosMetodos { public ArreglosMetodos() { public static void main(string[] args) { int n = (int)(math.random()*10) + 1; //genera un valor entre 1 y 10 System.out.println("n: " + n + "\n"); int vector[] = new int[n]; generar(vector, 10, 100); // genera un vector de n elementos con // valores entre 10 y 100 System.out.println("\nVector\n"); escribir(vector); System.out.println("\npromedio de vector: "+ promedio(vector)+"\n"); float matriz[][] = new float[n][2*n]; generar(matriz,10,100); //genera una matriz de nx2*n System.out.println("\nMatriz"); // con valores entre 10 y 100 escribir(matriz); System.out.println("Fila 0 de Matriz"); escribir(matriz[0]); //trata una fila de una matriz como un vector int vector2[]= vector; // vector2 referencia los elementos de vector
8 System.out.println("\nVector\tVector2 elementos de vector"); escribir(vector, vector2); vector2 referencia los generar(vector2, 10, 100); System.out.println("\nVector\tVector2\tse generaron nuevos valores en vector2"); escribir(vector, vector2); vector2 = generar(n, 20, 50); // generar retorna la referencia a un // nuevo arreglo // creado por el metodo generar System.out.println("\nVector\tVector2\tse generaron nuevos valores en vector2 ahora vector2 no referencia los elementos de vector"); escribir(vector, vector2); System.out.println("\nSuma de vector con vector\nvector\tsuma\n"); escribir(vector, sumar(vector, vector)); /** genera un valor float aleatorio en el rango (a, b) */ public static float aleatorio(float a, float b){ return (float)(math.random()*(b - a)) + a; /** genera un valor int aleatorio en el rango (a, b) */ public static int aleatorio(int a, int b){ return (int)(math.random()*(b - a + 1)) + a; /** genera un vector x con valores int aleatorios en el rango (a, b) */ public static void generar(int x[], int a, int b){ for(int i = 0; i < x.length; i++) x[i] = aleatorio(a,b); /** genera un vector x[n] con valores int aleatorios en el rango (a, b) retorna la referencia al vector generado */ public static int[] generar(int n, int a, int b){ int x[] = new int[n]; for(int i = 0; i < n; i++) x[i] = aleatorio(a,b); return x; /** escribe todos los elementos del vector x */ public static void escribir(int x[]){ for(int i = 0; i<x.length; i++) System.out.println("[" + i + "]: " + x[i] ); /** escribe todos los elementos del vector x */ public static void escribir(float x[]){ for(int i = 0; i<x.length; i++) System.out.println("[" + i + "]: " + x[i] ); /** escribe todos los elementos de los vectores x e y uno al lado del otro*/ public static void escribir(int x[], int y[]){ for(int i = 0; i<x.length; i++) System.out.println( x[i] + "\t" + y[i]);
9 /** calcula el promedio de todos los elementos del vector x */ public static float promedio(int x[]){ float suma = 0 ; for(int i = 0; i < x.length; i++) suma += x[i]; return suma/x.length; /** retorna en el vector s la suma de los vectores x e y */ public static void sumar(int x[], int y[], int s[]){ for(int i = 0; i< x.length; i++) s[i]=x[i]+y[i]; /** retorna la referencia al vector que almacena la suma de los vectores x e y */ public static int [] sumar(int x[], int y[]){ int s[] = new int [x.length]; for(int i = 0; i< x.length; i++) s[i] = x[i] + y[i]; return s; /** genera una matriz x con valores float aleatorios en el rango (a, b) */ public static void generar(float x[][], int a, int b){ for(int i = 0; i < x.length; i++) for(int j = 0; j < x[0].length; j++) x[i][j] = aleatorio(a,b); /** escribe todos los elementos de la matriz x*/ public static void escribir(float x[][]){ for(int i = 0; i<x.length; i++){ for(int j = 0; j < x[0].length; j++) System.out.print((int)(x[i][j] * 100)/100.0 + "\t"); System.out.println();