Está en la página 1de 19

Apuntes de Programacin Orientada a Objetos

Captulo 1
Arreglos unidimensionales y multidimensionales
1.1 Objetivo Educacional
El estudiante conocer la representacin interna de los arreglos unidimensionales y multidimensionales. Asimismo, ser capaz de aplicarlos al construir modelos y desarrollar aplicaciones de software que requieran de stos.

1.2 Actividades de aprendizaje


Modelar objetos del mundo real que requieran de arreglos. Desarrollar los algoritmos de manipulacin de los arreglos para realizar operaciones bsicas. Representar un arreglo por medio de una clase, que incluya los mtodos que representan sus operaciones bsicas. Desarrollar un programa que implemente la clase arreglo y que interacte con otras clases.

1.3 Introduccin
El lenguaje Java como la mayora de los otros lenguajes de programacin, provee una manera de asociar con un solo nombre, a un conjunto de elementos del mismo tipo de dato. Tal coleccin o conjunto es llamado un arreglo o una matriz. Un arreglo es una estructura homognea cuyos valores se almacenan en espacios contiguos de memoria y cada elemento en particular puede ser accedido directamente por el nombre de la variable que identifica al arreglo seguido de uno o ms subndices encerrados entre corchetes.

Apuntes de Programacin Orientada a Objetos

Los arreglos pueden ser de una, de dos o de mltiples dimensiones. Es decir, se dice que pueden ser unidimensionales, bidimensionales o multidimensionales. A los arreglos unidimensionales se les llaman listas o vectores y a los bidimensionales tambin se les identifica como tablas. Primeramente se empezar por analizar los arreglos unidimensionales.

1.4 Arreglos Unidimensionales


Una representacin grfica de un arreglo unidimensional (suponer un arreglo m) puede ilustrarse como sigue:

m[0]

m[1]

m[2]

m[3]

m[4]

m[5]

m[6]

m[7]

m[8]

m[9]

En donde cada una de las celdas del arreglo contiene un elemento en particular que puede ser numrico, carcter o de referencia a un objeto. De una manera similar a una variable ordinaria, antes de utilizar un arreglo hay que declararlo, slo que se deben poner corchetes ya sea antes o despus del nombre para que el compilador interprete que se trata de un arreglo: tipo [] nombre; tipo nombre []; en donde tipo indica el tipo de los elementos en el arreglo, que puede ser cualquier tipo primitivo o referenciado y nombre es el identificador para el arreglo. Ejemplos de declaraciones de arreglos seran los siguientes: int [] numeros; int [] lista; float [] precio; float [] b; int [] vector; CClase [] x; int numeros []; int lista []; float precio []; float b []; int vector []; CClase x [];

Apuntes de Programacin Orientada a Objetos

En donde se observa que pueden establecerse arreglos de tipos primitivos como int y float, o bien un arreglo de objetos. Ahora bien, una vez declarado el arreglo hay que crearlo, es decir, hay que reservar la memoria necesaria para contener todos los elementos del arreglo adems de asignar al arreglo una referencia a ese bloque. Java crea los arreglos con el operador new, por lo que se debe entender que Java trata a los arreglos como objetos. Cuando se crea un arreglo, se debe especificar su tamao: nombre = new tipo [tamao]; donde nombre, es el nombre del arreglo previamente declarado, tipo es el tipo de los elementos del arreglo y tamao es la cantidad de elementos en el arreglo. El tamao debe ser una expresin entera positiva menor que la precisin de un entero, y puede ser establecida en funcin de: un valor constante, una variable o una expresin aritmtica. En las declaraciones especificadas en los ejemplos anteriores, la creacin de los arreglos sera: numeros = new int[10]; lista = int [t]; // donde t es de tipo int precio = new float[15]; b = new float [20+i]; // donde i es de tipo int vector = new int [12]; x = new CClase [25];

Las operaciones de declaracin y creacin de una matriz tambin pueden hacerse en una misma lnea de cdigo: tipo [] nombre = new tipo [tamao]; tipo nombre [] = new tipo [tamao]; y en los ejemplos anteriores quedaran: int [] numeros = new int [10]; int lista [] = new int [55]; float [] precio = new float [15]; float b [] = new float [20]; int [] vector = new int [12]; CClase [] x = new CClase [25];
3

Apuntes de Programacin Orientada a Objetos

Por otro lado, el tamao de la matriz puede tambin establecerse en el momento de la ejecucin, haciendo uso de una variable a la cual se asigna un valor definido por el usuario, por ejemplo: int tam; System.out.print ( Cantidad de elementos para el arreglo: ); tam = Leer.datoInt ( ); // suponer mtodo donde se proporciona el valor por teclado int [] vector = new int [tam]; Una vez que el arreglo se ha declarado y creado, es momento de inicializarlo, es decir, asignarle los valores que el usuario desee, aunque por defecto, si el arreglo es numrico, el compilador le asigna a cada celda de almacenamiento el valor 0, y si no es numrico, les asigna un valor anlogo al 0; tratndose de caracteres, asigna el valor \u0000, a un booleano le asigna el valor false, y a una referencia a un objeto le asigna el valor null. Si se quiere inicializar con otros valores se puede hacer lo siguiente: float [] precio = {25.50F, 15.35F, 205.4F, 22.5F, 37.44F}; De esta manera, se ha declarado, creado e inicializado un arreglo, ahora se puede hacer referencia a un elemento del arreglo empleando el nombre del arreglo seguido por un subndice encerrado entre corchetes, el cual indica la posicin del valor en el arreglo. Las posiciones del arreglo van desde la posicin 0 hasta la n 1, donde n es el tamao declarado para el arreglo. Cada subndice debe ser expresado como una constante entera, una variable entera o una expresin entera ms compleja. Ejemplos: numeros [2] lista [i] x [i+1]

Si en algn momento se intenta acceder a un elemento que no se encuentre en el arreglo, por ejemplo, el elemento en una posicin menor a 0 mayor a n 1, Java lanza una excepcin del tipo ArrayIndexOutOfBoundsException, que indica que el valor del subndice est fuera de los lmites establecidos para el arreglo.

Apuntes de Programacin Orientada a Objetos

Cada objeto del arreglo tiene una variable esttica identificada por length, la cual registra la longitud del arreglo al momento de su creacin y puede ser utilizada de la siguiente forma: int t = a.length; donde a es el arreglo y t la variable entera que guardar la longitud. Visto lo anterior, enseguida se muestra un segmento de cdigo que despliega un arreglo:1 public class Account { public double balance ( ) { return acct_bal; } public int id ( ) { return acct_no; } private int acct_no; // nmero de cuenta private double acct_bal; // saldo actual // otros miembros.. } public class TestAcc { public static void main ( String [] args ) { Account [] arr = new Account [3]; arr [0] = new Account ( 233445678, 45.0 ); arr [1] = new Account ( 143741234, 65.0 ); arr [2] = new Account ( 453850357, 85.0 ); displayAccounts ( arr ); } static void displayAccounts ( Account [] acc ) { System.out.println ( Account no. Balance ); System.out.println ( ); for ( int i = 0; i < acc.length; i++ ) { System.out.println ( acc[i].id ( ) + + acc[i].balance ( ) ); } } }

WANG, Paul S. Java con programacin orientada a objetos y aplicaciones en la www. Pgs. 42 49 5

Apuntes de Programacin Orientada a Objetos

Las funciones parseShort (dato ( )), parseInt (dato( )) y parseLong (dato( )), son funciones predefinidas que convierten una cadena a un valor short, int y long respectivamente.

1.5 Matrices Asociativas


Una matriz asociativa es aquella en la que el ndice se corresponde con un dato, como por ejemplo, si se utiliza una matriz diasMes [13] para especificar los das del mes, entonces en diasMes [1], el ndice 1 especifica los das del mes 1, en diasMes [2], el ndice 2 especifica los das del mes 2, y as sucesivamente. De esta manera se puede hacer uso del valor para especificar la posicin que ocupa en el arreglo y hacer el proceso ms sencillo.

1.6 Ejercicios

Escribir un programa que lea a travs de la entrada estndar, n nmeros de tipo entero y los almacene en un arreglo. A continuacin aplique el mtodo de la burbuja para ordenarlos en forma ascendente, y muestre el arreglo ya ordenado. El mtodo de la burbuja recibe este nombre porque los valores ms pequeos gradualmente burbujean hacia la parte alta del arreglo, como las burbujas de aire que ascienden en el agua, mientras que los valores ms grandes se hunden al fondo del arreglo. La tcnica es pasar varias veces por el arreglo. Con cada paso se comparan pares sucesivos de elementos. Si uno de los pares est en orden ascendente (o son idnticos los valores), se queda tal cual. Si est en orden descendente, se intercambian sus valores en el arreglo. import java.io.*; import hsa.Console; public class CBurbuja { static Console C; static void BubbleSort ( int [] a ) // Ordena un conjunto de valores enteros { int aux ; for ( int i = 0; i < a.length 1; i++ )
6

Apuntes de Programacin Orientada a Objetos

for ( int j = 0; j < a.length 1; j++ ) if ( a[j] > a[j+1] ) { aux = a[j]; a[j] = a[j+1]; a[j+1] = aux; } } static void Muestra ( int [] a ) // Muestra en pantalla los valores del arreglo { for ( int i = 0; i < a.length; i++ ) System.out.println ( a[i] ); } public static void main ( String [] args ) { C = new Console ( ); int num, i = 0; C.println ( Numero de elementos a ordenar: ); int n = C.readInt ( ); int [] a = new int[n]; // Declaracin y creacin del arreglo de enteros C.println ( Escriba los valores: ); while ( i < a.length ) a[i++] = C.readInt ( ); BubbleSort ( a ); // ordena los n valores Muestra ( a ); // imprime valores ordenados } }

Escribir un programa que lea una lnea de la entrada estndar y la almacene en una matriz de caracteres. A continuacin utilizando un mtodo, deseamos convertir los caracteres escritos en minsculas, a maysculas. Llamar al mtodo MinusculasMayusculas ( ). import java.io.*; import hsa.Console; public class CCadenas { static Console C; static void MinusculasMayusculas ( char [] str ) // Conversin a maysculas { int i = 0, desp = 'a' 'A'; for ( i = 0; i < str.length && str[i] != '\0'; i++ ) if ( str[i] >= 'a' && str[i] <= 'z' ) str[i] = (char)(str[i] desp); }
7

Apuntes de Programacin Orientada a Objetos

static void Muestra ( char [] str ) // Muestra en pantalla el arreglo { int i = 0; for ( i = 0; i < str.length && str[i] != '\0'; i++ ) System.out.print ( str[i] ); } public static void main ( String [] args ) { C = new Console ( ); char [] cadena = new char[80]; int car, i = 0; C.println ( Escriba una cadena de caracteres: ); while ( (car = C.readChar ( )) != '\n' && i < cadena.length ) cadena [i++] = (char)car; MinusculasMayusculas ( cadena ); // convertir minsculas a maysculas Muestra ( cadena ); } } o bien, tambin puede implementarse de la siguiente forma: import java.io.*; import hsa.Console; public class CCadenas { static Console C; static void MinusculasMayusculas ( char [] str ) { int i = 0, desp = 'a' 'A'; for ( i = 0; i < str.length && str[i] != '\0'; i++ ) if ( str[i] >= 'a' && str[i] <= 'z' ) str[i] = (char)( str[i] desp ); } static void Muestra1 ( String cadena ) { System.out.println ( cadena ); } static void Muestra2 ( char [] str ) { int i = 0; for ( i = 0; i < str.length && str[i] != '\0'; i++ ) System.out.print ( str[i] ); }
8

Apuntes de Programacin Orientada a Objetos

public static void main ( String [] args ) { C = new Console ( ); String cadena; C.println ( Escriba una cadena de caracteres: ); cadena = C.readLine ( ); char [] mcar = cadena.toCharArray ( ); MinusculasMayusculas ( mcar ); // convertir minsculas a maysculas Muestra1 ( cadena ); Muestra2 ( mcar ); } } Cuando se llama al mtodo, lo que en realidad se pasa es una referencia al comienzo de la matriz. Por lo tanto, el mtodo llamado y el mtodo que llama, trabajan sobre la misma matriz, por lo que los cambios realizados por uno u otro son visibles para ambos.

1.7 Clase String


Pertenece al paquete java.lang y proporciona mtodos para examinar caracteres individuales de una cadena de caracteres, comparar cadenas, buscar y extraer subcadenas, copiar cadenas y convertir cadenas a maysculas o a minsculas. Java proporciona un soporte para convertir otros objetos a objetos String as como el operador + para concatenar objetos String. Para poder utilizar estos mtodos, se debe saber que un objeto String representa una cadena de caracteres no modificable, por lo tanto, una operacin para convertir a maysculas no modificar el objeto original, sino que devolver un nuevo objeto con la cadena resultante de esta operacin.

1.8 Mtodos de la Clase String


A continuacin se listan algunos de los mtodos ms usuales de la clase String: String ( String valor ) constructor para crear un objeto de la clase String:

Apuntes de Programacin Orientada a Objetos

String str1 = abc; String str2 = new String ( def ); String str3 = new String ( str1 ); String toString ( ) devuelve el propio objeto String que recibe el mensaje toString: String str1 = abc, str2; str2 = str1.toString ( ); // str1 y str2 permiten acceder al mismo objeto String. String concat ( String str ) concatena el objeto especificado a continuacin del objeto String que recibe el mensaje concat: System.out.println ( Ayer.concat ( llovi ) ); System.out.println ( Ayer.concat ( llovi.concat ( mucho )) ); Si alguno de los string tiene longitud 0, se concatena una cadena nula. int compareTo ( String otroString ) compara lexicogrficamente el String especificado, con el objeto String que recibe el mensaje compareTo, para saber su orden alfabtico. Establece diferencia entre maysculas y minsculas. Si no se quiere hacer diferencia entre maysculas y minsculas utilizar el mtodo compareToIgnoreCase. Devuelve un entero: <0 si el String que recibe el mensaje es menor que el otroString, =0 si el String que recibe el mensaje es igual que el otroString y >0 si el String que recibe el mensaje es mayor que el otroString String str1 = abcde, str2 = abcdefg; if ( str1.compareTo ( str2 ) < 0) System.out.println ( str1 ); // escribe abcde String str1 = abc, str2 = Abc; if ( str1.compareTo ( str2 ) < 0) System.out.println ( str1 ); // no escribe nada int length ( ) devuelve la longitud o nmero de caracteres: String str1 = La provincia de Santander es muy bonita; System.out.println ( longitud: + str1.length( ) ); Imprime: 39
10

Apuntes de Programacin Orientada a Objetos

String toLowerCase ( ) convierte a minsculas las letras maysculas del objeto String que recibe el mensaje toLowerCase. El resultado es un nuevo objeto String en minsculas: String str1, str2 = Santander, tu eres novia del mar ...; str1 = str2.toLowerCase ( ); Almacena en str1 la cadena str2 en minsculas String toUpperCase ( ) convierte a maysculas las letras minsculas del objeto String que recibe el mensaje toUpperCase. El resultado es un nuevo objeto String en maysculas: String str1, str2 = Santander, tu eres novia del mar ...; str1 = str2.toUpperCase ( ); Almacena en str1 la cadena str2 en maysculas String charAt ( int ndice ) devuelve el carcter que est en la posicin especificada en el objeto String que recibe el mensaje charAt. El ndice del primer carcter es el 0. Por lo tanto, el parmetro ndice tiene que estar entre los valores 0 y length ( ) 1, de lo contrario Java lanzar una excepcin. String replace ( char car, char nuevoCar ) devuelve un nuevo String resultado de reemplazar todas las ocurrencias car por nuevoCar en el objeto String que recibe el mensaje replace. Si el carcter car no existiera, entonces se devuelve el objeto String original. static String valueOf ( tipo dato ) devuelve un nuevo String creado a partir del dato pasado como argumento. Puesto que el mtodo es esttico no necesita ser invocado para un objeto String. El argumento puede ser de los tipos boolean, char, char [], int, long, float, double y Object: double pi = Math.Pi; String str1 = String.valueOf ( pi ); String trim ( ) elimina espacios en blanco que pueda haber al inicio y al final del objeto String que recibe el mensaje trim. Devuelve un objeto.

11

Apuntes de Programacin Orientada a Objetos

String substring ( int IndiceInicial, int IndiceFinal ) retorna un String que encapsula una subcadena de la cadena almacenada por el objeto String que recibe el mensaje substring. La cadena empieza en IndiceInicial y se extiende hasta IndiceFinal 1, o hasta el final si IndiceFinal no se especifica. En el siguiente ejemplo, elimina los espacios en blanco que haya al principio y al final de str1, verifica si str1 finaliza con gh y en caso afirmativo obtiene de str1 una subcadena str2 igual a str1 menos el sufijo gh: String str1 = abcdefgh , str2 = ; str1 = str1.trim ( ); if ( str1.endsWith ( gh ) ) str2 = str1.substring ( 0, str1.length ( ) gh.length ( ) ); char [ ] toCharArray ( ) devuelve una matriz de caracteres creada a partir del objeto String que recibe el mensaje toCharArray: String str = abcde; char [] mcar = str.toCharArray ( ); boolean startsWith ( String prefijo ) devuelve un valor true si el prefijo especificado coincide con el principio del objeto String que recibe el mensaje startsWith. boolean endsWith ( String sufijo ) devuelve un valor true si el sufijo especificado coincide con el final del objeto String que recibe el mensaje endsWith. int indexOf ( int car ) devuelve el ndice de la primera ocurrencia del carcter especificado por car en el objeto String que recibe el mensaje indexOf. Si car no existe el mtodo indexOf devuelve el valor 1. Puede comenzar la bsqueda por el final en lugar de hacerlo por el principio utilizando el mtodo lastIndexOf. int indexOf ( String str ) devuelve el ndice de la primera ocurrencia de la subcadena especificada por str en el objeto String que recibe el mensaje indexOf. Si str no existe el

12

Apuntes de Programacin Orientada a Objetos

mtodo indexOf devuelve el valor 1. Puede comenzar la bsqueda por el final en lugar de hacerlo por el principio utilizando el mtodo lastIndexOf. byte [ ] getBytes ( ) devuelve una matriz de bytes creada a partir del objeto String que recibe el mensaje getBytes.

1.9 Conversin de cadenas de caracteres a datos numricos


Cuando una cadena de caracteres representa un nmero y se necesita realizar la conversin al valor numrico correspondiente, por ejemplo, para realizar una operacin aritmtica con l, hay que utilizar los mtodos apropiados proporcionados por las clases del paquete java.lang: Byte, Character, Short, Integer, Long, Float, Double y Boolean. Por ejemplo: String str1 = 1234; int dato1 = Integer.parseInt ( str1 ); String str2 = 12.34; Float dato2 = (new Float(str2)).floatValue ( ); // convertir a float // convertir a entero

1.10

Arreglos de referencias a objetos

Cada elemento de un arreglo unidimensional es de un tipo primitivo, o bien una referencia a un objeto. Java no soporta los arreglos multidimensionales, pero puede lograr esta funcionalidad haciendo uso de un arreglo unidimensional para almacenar las referencias a objetos, por ejemplo, si queremos almacenar un arreglo que contenga los nombres de los alumnos de un determinado grupo, se define una matriz de n elementos para que cada uno de ellos almacene una referencia a una matriz unidimensional de m caracteres que conforman el nombre del alumno.

13

Apuntes de Programacin Orientada a Objetos

1.11 Matrices numricas multidimensionales


La definicin se hace de la siguiente forma: tipo [][]... nombre_matriz = new tipo[expr1] [expr2]...; donde tipo es un tipo primitivo entero o real. El nmero de elementos de una matriz multidimensional es el producto de las dimensiones indicadas por expr1, expr2, ... por ejemplo, la lnea de cdigo siguiente crea una matriz de dos dimensiones con 2 x 3 = 6 elementos de tipo int: int [][] m = new int [2][3]; La representacin de este arreglo sera:
m m0 m1 m00 m10 m01 m11 m02 m12 Fila 0 Fila 1

Para comprobar la existencia y la longitud de los arreglos unidimensionales: System.out.println ( m.length ); System.out.println ( m[0].length ); System.out.println ( m[1].length ); // resultado 2 // resultado 3 // resultado 3

Otra forma de representar la matriz anterior de una forma ms fcil, sera:


m Fila 0 Fila 1 m00 m10 m01 m11 m02 m12

Para acceder a los elementos de arreglo m, se utilizan dos subndices, el primero de los cuales indicar la fila y el segundo la columna donde se localiza el elemento. int i = 1, j = 2; m [i][j] = 7; // subndices // fila 1, columna 2

14

Apuntes de Programacin Orientada a Objetos

1.12 Ejercicios
Escribir un programa que asigne datos a una matriz de dos dimensiones y a continuacin escriba la suma correspondiente de sus valores. import java.io.*; import hsa.Console; public class CSumaMatriz { static Console C; static void Captura ( float [][] m, int nfilas, int ncols ) { int fila = 0, col = 0; for ( fila = 0; fila < nfilas; fila++ ) for ( col = 0; col < ncols; col++ ) { C.print ( m[ + fila + ][ + col + ] = ); m [fila][col] = C.readFloat ( ); } } static float Suma ( float [][] m, int nfilas, int ncols ) { float sumavalores = 0; int fila = 0, col = 0; for ( fila = 0; fila < nfilas; fila++ ) for ( col = 0; col < ncols; col++ ) sumavalores += m[fila][col]; return sumavalores; } public static void main ( String [] args ) { C = new Console ( ); int nfilas, ncols; do { C.print ( Numero de filas de la matriz: ); nfilas = C.readInt ( ); } while ( nfilas < 1 ); do { C.print ( Numero de columnas de la matriz: ); ncols = C.readInt ( ); } while ( ncols < 1 );

15

Apuntes de Programacin Orientada a Objetos

float [][] m = new float [nfilas][ncols]; C.println ( Introducir los valores de la matriz ); Captura ( m, nfilas, ncols ); float s = Suma ( m, nfilas, ncols ); C.println ( Suma de la matriz = + s ); } }

Para almacenar una matriz bidimensional que generalmente tiene muchos elementos nulos (matriz esparcida) se puede utilizar una matriz unidimensional en la que slo se guardarn los elementos no nulos precedidos por sus ndices, fila y columna, lo que redunda en un aprovechamiento de espacio. Por ejemplo, la matriz: 6 0 2 0 0 0 5 0 0 0 0 0 0 7 0 0 0 0 0 8 4 2 0 0 0

fila

se guardar en una matriz unidimensional as:

columna valor

0 0 6 0 4 4 1 1 5 1 4 2 2 0 2 3 2 7 4 3 8 Se pide:
a)

Escribir un mtodo que lea una matriz bidimensional por filas y la almacene en int CrearMatrizUni ( int [] m, int fi, int co );

una matriz m unidimensional. El prototipo de este mtodo ser: Los parmetros fi y co se corresponden con el nmero de filas y de columnas de la supuesta matriz bidimensional. b) Escribir un mtodo que permita representar en pantalla la matriz bidimensional int Visualizar ( int f, int c, int [] m ); Los parmetros f y c se corresponden con la fila y la columna del elemento que se visualiza. El valor del elemento que se visualizar se obtiene, lgicamente de la matriz unidimensional creada en el apartado a, as: buscamos por los ndices f y c; si se encuentran, el mtodo Visualizar devuelve el valor almacenado justamente a continuacin; si no se encuentran, entonces devuelve un cero. por filas y columnas. El prototipo de este mtodo ser:

16

Apuntes de Programacin Orientada a Objetos

Escribir un programa que, utilizando el mtodo CrearMatrizUni cree una matriz unidimensional a partir de una supuesta matriz esparcida bidimensional y a continuacin, utilizando el mtodo Visualizar, muestre en pantalla la matriz bidimensional. import java.io.*; import hsa.Console; public class CMatriz { static Console C; static int CrearMatrizUni ( int [] m, int nfilas, int ncols ) { int fila = 0, col = 0, sum = 0, i = 0; int [][] m1 = new int [nfilas][ncols]; for ( fila = 0; fila < nfilas; fila++ ) for ( col = 0; col < ncols; col++ ) { C.print ( m[ + fila + ][ + col + ] = ); m1 [fila][col] = C.readInt ( ); if ( m1[fila][col] != 0 ) sum += 1; } sum = sum * 3; for ( fila = 0; fila < nfilas; fila++ ) for ( col = 0; col < ncols; col++ ) if ( m1[fila][col] != 0 ) { m [i++] = fila; m [i++] = col; m [i++] = m1[fila][col]; } return sum; } static void Ver ( int f, int c, int [] m ) { int fila = 0, col = 0, i = 0; for ( fila = 0; fila < f; fila++ ) { for ( col = 0; col < c; col++ ) { i = Visualizar ( fila, col, m ); System.out.print ( i + ); } System.out.println ( );

17

Apuntes de Programacin Orientada a Objetos

} } static int Visualizar ( int f, int c, int [] m ) { int i = 0; while ( m[i] != f && m[i+1] != c && i < m.length ) i += 3; if ( i < m.length ) while ( m[i] == f && m[i+1] < c && i < m.length ) i += 2; if ( m[i] == f && m[i+1] == c ) return m [i+2]; else return 0; } public static void main ( String [] args ) { C = new Console ( ); int nfilas, ncols, t = 0; do { C.print ( Numero de filas de la matriz: ); nfilas = C.readInt ( ); } while ( nfilas < 1 ); do { C.print ( Numero de columnas de la matriz: ); ncols = C.readInt ( ); } while ( ncols < 1 ); int [] m = new int[nfilas * ncols]; C.println ( Introducir los valores de la matriz ); t = CrearMatrizUni ( m, nfilas, ncols ); Ver ( nfilas, ncols, m ); } }

1.13 Arreglos de cadenas de caracteres


Los arreglos de cadenas de caracteres son arreglos multidimensionales, generalmente de dos dimensiones, en las que cada fila se corresponde con una cadena de caracteres. Entonces segn

18

Apuntes de Programacin Orientada a Objetos

lo estudiado, una fila puede ser un objeto arreglo unidimensional, un objeto String o un objeto StringBuffer. La definicin para este arreglo o matriz sera: char [][] nombre_matriz = new char [filas][longitud_fila]; ejemplo: char [][] m = new char [F][C]; que puede representarse de la siguiente manera: m m0 m1 m2 mF-1 m0,0 m 1,0 m 2,0 mF-1,0 m 0,1 m 1,1 m 2,1 m F-1,1 m 0,2 m 1,2 m 2,2 m F-1,2 m 0,C-1 m 1,C-1 m 2,C-1 m F-1,C-1 fila 0 fila 1 fila 2 fila F-1

Ms fcilmente podemos representarla as: m0 m1 m2 m3 Para acceder a los elementos de la matriz m, puesto que se trata de una matriz de cadenas de caracteres, se utiliza slo el primer subndice, o sea el que hace referencia a la fila.

19

También podría gustarte