Dijimos que un arreglo es una estructura de datos que permite almacenar un CONJUNTO de datos del MISMO tipo. Con un único nombre se define un arreglo y por medio de un subíndice hacemos referencia a cada elemento del mismo (componente)
Vimos como crear arreglos con componentes de tipo Int, Char, Float, Double etc., ahora veremos como definir un arreglo con componentes de una determinada clase que declaramos nosotros.
Declarar una clase Persona con las propiedades nombre y edad, definir como métodos su impresión y otra que retorna true si es mayor de edad o false en caso contrario
En la función main definir un arreglo con cuatro elementos de tipo Persona. Calcular cuantas personas son mayores de edad.
class Persona(val nombre: String, val edad: Int) { fun imprimir() { println("Nombre: $nombre Edad: $edad") } fun esMayor() = if (edad >= 18) true else false } fun main(parametro: Array<String>) { val personas: Array<Persona> = arrayOf(Persona("ana", 22), Persona("juan", 13), Persona("carlos", 6), Persona("maria", 72)) println("Listado de personas") for(per in personas) per.imprimir() var cant = 0 for(per in personas) if (per.esMayor()) cant++ println("Cantidad de personas mayores de edad: $cant") }
La declaración de la clase Persona define 2 propiedades en el mismo constructor y sus dos métodos:
class Persona(val nombre: String, val edad: Int) { fun imprimir() { println("Nombre: $nombre Edad: $edad") } fun esMayor() = if (edad >= 18) true else false }
En la función main definimos una variable llamada personas que es un Array con componentes de tipo Persona. Para definir sus componentes utilizamos la función arrayOf que nos provee la librería estándar de Kotlin:
val personas: Array<Persona> = arrayOf(Persona("ana", 22), Persona("juan", 13), Persona("carlos", 6), Persona("maria", 72))
A la función arrayOf se le pasa cada uno de los objetos de tipo Persona.
Un Array una vez creado no puede cambiar su tamaño.
La forma más fácil de recorrer el Array es mediante un for:
for(per in personas) per.imprimir()
En cada ciclo del for en la variable per se almacena una de las componentes del arreglo.
De forma similar para contar la cantidad de personas mayores de edad procedemos a definir un contador y mediante un for recorremos el arreglo y llamamos al método esMayor para cada objeto:
var cant = 0 for(per in personas) if (per.esMayor()) cant++ println("Cantidad de personas mayores de edad: $cant")
A un Array lo podemos acceder por medio de un subíndice o por medio de llamadas a métodos, podemos cambiar el valor almacenado en una componente etc.:
//imprimir los datos de la persona almacenada en la componente 0 personas[0].imprimir() //imprimir la cantidad de compoentes del arreglo println(personas.size) //imprimir la edad de la persona almacenada en la última componente println(personas[3].nombre) //Copiar la persona almacenada en la primer componente en la segunda personas[1] = personas[0] personas[0].imprimir() personas[1].imprimir() //Acceder a la primer componente por medio de un método en lugar de un subíndice personas.get(0).imprimir() //Copiar la primer componente en la tercera mediante un método en lugar de un subíndice personas.set(2, personas[0]) println("-------------------------------") for(per in personas) per.imprimir()
data class Articulo(val codigo: Int, val descripcion: String, var precio: Float)Definir un Array con 4 elmentos de tipo Articulo.
Proyecto145 data class Articulo(val codigo: Int, val descripcion: String, var precio: Float) fun imprimir(articulos: Array<Articulo>) { for(articulo in articulos) println("Código: ${articulo.codigo} - Descripción ${articulo.descripcion} Precio: ${articulo.precio}") } fun aumentarPrecio(articulos: Array<Articulo>) { for(articulo in articulos) articulo.precio = articulo.precio + (articulo.precio * 0.10f) } fun main(parametro: Array<String>) { val articulos: Array<Articulo> = arrayOf(Articulo(1, "papas", 7.5f), Articulo(2, "manzanas", 23.2f), Articulo(1, "naranjas", 12f), Articulo(1, "cebolla", 21f)) println("Listado de precios actual") imprimir(articulos) aumentarPrecio(articulos) println(); println("Listado de precios con aumento del 10%") imprimir(articulos) } Proyecto146 class Dado (var valor: Int = 1){ fun tirar() { valor = ((Math.random() * 6) + 1).toInt() } fun imprimir() { println("Valor del dado: $valor") } } fun main(parametro: Array<String>) { var dados: Array<Dado> = arrayOf(Dado(), Dado(), Dado(), Dado(), Dado()) for(dado in dados) dado.tirar() for(dado in dados) dado.imprimir() }