Professional Documents
Culture Documents
Estructura dinmica de
datos
DECLARACIN Y CREACIN DE UN ARRAYLIST
MTODO
DESCRIPCIN
size()
add(X)
add(posicin, X)
get(posicion)
remove(posicion)
remove(X)
clear()
set(posicin, X)
contains(X)
indexOf(X)
RECORRER UN ARRAYLIST
Ejemplo 1:
ArrayList<String> nombres = new ArrayList<String>();
nombres.add("Ana");
nombres.add("Luisa");
nombres.add("Felipe");
System.out.println(nombres); // [Ana, Luisa, Felipe]
nombres.add(1, "Pablo");
System.out.println(nombres); // [Ana, Pablo, Luisa, Felipe]
nombres.remove(0);
System.out.println(nombres); // [Pablo, Luisa, Felipe]
nombres.set(0,"Alfonso");
System.out.println(nombres); // [Alfonso, Luisa, Felipe]
String s = nombres.get(1);
String ultimo = nombres.get(nombres.size() - 1);
System.out.println(s + " " + ultimo); // Luisa Felipe
Ejemplo 2: Escribe un programa que lea nmeros enteros y los
guarde en un ArrayList hasta que se lea un 0 y muestra los nmeros
ledos, su suma y su media.
import java.util.*;
public class ArrayList2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> numeros = new ArrayList<Integer>();
int n;
do {
System.out.println("Introduce nmeros enteros. 0 para
acabar: ");
System.out.println("Numero: ");
n = sc.nextInt();
if (n != 0)
numeros.add(n);
}while (n != 0);
System.out.println("Ha introducido: " + numeros.size() + "
nmeros:");
//mostrar el arrayList completo
System.out.println(numeros);
//recorrido usando un iterador para mostrar un elemento por
lnea
Iterator it = numeros.iterator();
while(it.hasNext())
System.out.println(it.next());
//recorrido usando foreach para sumar los elementos
double suma = 0;
for(Integer i: numeros){
suma = suma + i;
}
System.out.println("Suma: " + suma);
System.out.println("Media: " + suma/numeros.size());
}
}
COPIAR UN ARRAYLIST
Para crear una matriz lo que creamos es un ArrayList cuyos elementos son a su vez
ArrayList. Esto se puede extender sucesivamente y obtener arrays de ms
dimensiones.
Ejemplo:
Programa que lee las notas de 10 alumnos y las guarda en un ArrayList Bidimensional.
Cada alumno tiene un nmero indeterminado de notas. La lectura de notas de cada
alumno acaba cuando se introduce un nmero negativo. Finalmente se muestran todas
las notas de todos los alumnos.
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
final int numAlumnos = 10; //nmero de alumnos
int i, j, nota, cont = 1;
//crear un ArrayList bidimensional de enteros vaco
//Realmente se crea un ArrayList de ArrayLists de enteros
ArrayList<ArrayList<Integer>> array = new ArrayList<ArrayList<Integer>>();
//Se leen las notas de cada alumno.
System.out.println("Introduzca notas. <0 para acabar");
for(i=0;i<numAlumnos;i++){
cont = 1;
System.out.println("Alumno " + (i+1) + ": ");
System.out.print("Nota " + cont + ": ");
nota = sc.nextInt();
//para cada alumno se aade una nueva fila vaca
//esto es necesario porque el arrayList se crea vaco
array.add(new ArrayList<Integer>());
while(nota>=0){
array.get(i).add(nota); //en la fila i se aade un nueva nota
cont++;
System.out.print("Nota " + cont + ": ");
nota = sc.nextInt();
}
negativos
int[] numeros = new int[10]; //array que contendr los
nmeros ledos por teclado
double sumaPos = 0, sumaNeg = 0; //acumuladores para las
sumas de positivos y negativos
//lectura de datos y llenar el array
System.out.println("Lectura de los elementos del array: ");
for (i = 0; i < 10; i++) {
System.out.print("numeros[" + i + "]= ");
numeros[i]=sc.nextInt();
}
//recorrer el array para sumar por separado los nmeros
positivos
// y los negativos
for (i = 0; i < 10; i++) {
if (numeros[i] > 0){ //sumar positivos
sumaPos += numeros[i];
pos++;
} else if (numeros[i] < 0){ //sumar negativos
sumaNeg += numeros[i];
neg++;
}
}
//Calcular y mostrar las medias
if (pos != 0) {
System.out.println("Media de los valores positivos: " +
sumaPos / pos);
} else {
System.out.println("No ha introducido numeros positivos");
}
if (neg != 0) {
System.out.println("Media de los valores negativos: " +
sumaNeg / neg);
} else {
System.out.println("No ha introducido numeros negativos");
}
}
}
Relacin N 2: Ejercicios 3 y 4
3. Programa que lee por teclado la nota de los alumnos de una clase
y calcula la nota media del grupo. Tambin muestra los alumnos con
notas superiores a la media. El nmero de alumnos se lee por
teclado.
Este programa utiliza un array de elementos de tipo double que
contendr las notas de los alumnos.
El tamao del array ser el nmero de alumnos de la clase, por lo
tanto primero se pedir por teclado el nmero de alumnos y a
continuacin se crear el array.
Se realizan 3 recorridos sobre el array, el primero para asignar a cada
elemento las notas introducidas por teclado, el segundo para
sumarlas y calcular la media y el tercero para mostrar los alumnos
con notas superiores a la media.
import java.util.*;
public class MediaDeLaClase {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numAlum, i;
double suma = 0, media;
//Lectura del nmero de alumnos. Debe ser un valor positivo
do {
System.out.print("Nmero de alumnos de la clase: ");
numAlum = sc.nextInt();
} while (numAlum <= 0);
//se crea un array llamado notas de numAlumn elementos de
tipo double
double[] notas = new double[numAlum];
// Entrada de datos. Se lee la nota de cada alummo y se guarda
// en cada elemento del array
for (i = 0; i < notas.length; i++) {
System.out.print("Alumno " + (i + 1) + " Nota final: ");
notas[i] = sc.nextDouble();
}
5. Programa Java que guarda en un array 10 nmeros enteros que se leen por teclado.
A continuacin se recorre el array y calcula cuntos nmeros son positivos, cuntos
negativos y cuntos ceros.
}
//se recorre el array para sumar positivos y negativos
for (i = 0; i < numeros.length; i++) {
if (numeros[i] > 0){ //sumar positivos
sumaPos += numeros[i];
pos++;
} else if (numeros[i] < 0){ //sumar negativos
sumaNeg += numeros[i];
neg++;
}
}
//mostrar resultados
if (pos != 0) {
System.out.println("Media de los valores positivos: " + sumaPos / pos);
} else {
System.out.println("No ha introducido nmeros positivos");
}
if (neg != 0) {
System.out.println("Media de los valores negativos: " + sumaNeg / neg);
} else {
System.out.println("No ha introducido nmeros negativos");
}
}
7. Programa Java para leer la altura de N personas y calcular la altura media. Calcular
cuntas personas tienen una altura superior a la media y cuntas tienen una altura
inferior a la media. El valor de N se pide por teclado y debe ser entero positivo.
/*
* Leer la altura de N personas y calcular la altura media
* Mostra cuntos hay superiores a la media.
*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i, N;
int contMas = 0, contMenos = 0;
double media = 0;
//Leer el nmero de personas
do{
System.out.print("Nmero de personas: ");
N = sc.nextInt();
}while(N<=0);
//Se crea el array de tamao N
double[] alto = new double[N];
//Leer alturas
System.out.println("Lectura de la altura de las personas: ");
for (i = 0; i < N; i++) {
System.out.print("persona " + (i+1) + " = ");
alto[i] = sc.nextDouble();
media = media + alto[i]; //se suma la estatura leda para calcular la media
}
//Calcular la media
media = media / N;
//recorremos el array para ver cuantos hay ms altos
//que la media y cuantos ms bajos
for (i = 0; i < alto.length; i++) {
if (alto[i] > media){ //si la estatura es mayor que la media
contMas++;
} else if (alto[i] < media){ //si es menor
contMenos++;
}
}
//Mostrar resultados
System.out.println("Estatura media: " + media);
System.out.println("Personas con estatura superior a la media: " + contMas);
System.out.println("Personas con estatura inferior a la media: " + contMenos);
}
String nombreMayor;
double mayorSueldo;
int i = 0;
//se lee el primer empleado
System.out.println("Lectura de nombres y sueldos de empleados: ");
System.out.print("Empleado " + (i + 1) + ": ");
empleados[i] = sc.nextLine();
System.out.print("Sueldo: ");
sueldos[i] = sc.nextDouble();
//se toma el primero como mayor
mayorSueldo = sueldos[i];
nombreMayor = empleados[i];
//se leen el resto de empleados
for (i = 1; i < empleados.length; i++) {
sc.nextLine(); //limpiar el buffer
System.out.print("Empleado " + (i + 1) + ": ");
empleados[i] = sc.nextLine();
System.out.print("Sueldo: ");
sueldos[i] = sc.nextDouble();
//se compara el sueldo ledo con el mayor
if (sueldos[i] > mayorSueldo) {
mayorSueldo = sueldos[i];
nombreMayor = empleados[i];
}
}
//mostrar resultados
System.out.println("Empleado con mayor sueldo: " + nombreMayor );
System.out.println("Sueldo: " + mayorSueldo);
}
7 comentarios:
1.
Ricardo12 de febrero de 2014, 16:28
import java.util.Scanner;
public class Ejemplo8 {
public static void main(String[]args){
System.out.println("Introduce nombre y sueldo del empleado");
Scanner scanner=new Scanner(System.in);
System.out.println("Numero de employees");
int n=scanner.nextInt();
String []arrayNombres=new String[n];
double []arraySalarios=new double[n];
for (int i = 0; i < n; i++) {
System.out.print("arrayNombres["+i+"]=");
arrayNombres[i]=scanner.next();
}
System.out.println("");
for (int i = 0; i < n; i++) {
System.out.print("arraySalarios["+i+"]=");
arraySalarios[i]=scanner.nextInt();
}
System.out.println("**************************************");
for (int i = 0; i < n; i++) {
System.out.println("Nombre:"+arrayNombres[i]+" salario="+arraySalarios[i]);
}
//ordemanos menor a mayor
for (int i = 0; i < n-1; i++) {
double aux;
String aux2;
for (int j = i+1; j arraySalarios[j]) {
aux=arraySalarios[i];
arraySalarios[i]=arraySalarios[j];
arraySalarios[j]=aux;
aux2=arrayNombres[i];
arrayNombres[i]=arrayNombres[j];
arrayNombres[j]=aux2;
}
}
}
System.out.println("**************************************");
System.out.println("Mayor salrio: Nombre "+arrayNombres[n-1]+"
Salario="+arraySalarios[n-1]);
}
}
Responder
2.
Javier Muoz Tous27 de diciembre de 2014, 15:26
1.
Annimo2 de marzo de 2015, 21:11
import static java. lang. System. out;
import java. util. Scanner;
import java. util. *;
class ejercicio3{
public static void main (String[] arguments){
float comparador=0;//asumir que el menor sueldo es cero
String nombre; // gusrdar el nombre del trabajador que se va entrando
int rec=0; // posicin en el array del trabajador que mas cobra
int i;
Scanner miScanner= new Scanner(System. in);
out.println("Cuantos trabajadores va a introducir en la base de datos");
int total= miScanner.nextInt();
String[]nombres=new String [total];
float []salario = new float [total];
for (i=0; i< total; i++ ){ // llenar los array
out.println("Entre el nombre de trabajador");
nombre = miScanner.next();
nombres[i] =nombre; // asignando el trabajador a una posicin en el array
out.println("Entre el salarios de :" +nombre);
float sal= miScanner.nextInt();
salario[i]= sal; // asignando el salario a una posicin en el array
if(comparador <= sal){ // comparar los salarios
comparador= sal; // guardar el mayor salario
rec = i; // guardar posicin del salrio mayor
}
}
out.println("El mayor salario de la empresa lo tiene:"+nombres[rec] +" " );
out.println("con:"+comparador+" "+ "euros" );
}}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("\nMatrcula: ");
sb.append(matricula);
sb.append("\nMarca: ");
sb.append(marca);
sb.append("\nModelo: ");
sb.append(modelo);
sb.append("\nKm: ");
sb.append(Km);
return sb.toString();
}
}
//clase principal
public class Basico1 {
int i, N;
//se pide por teclado el nmero de coches a leer
do {
System.out.print("Nmero de coches? ");
N = sc.nextInt();
} while (N < 0);
sc.nextLine(); //limpiar el intro
//lectura de N coches
for (i = 1; i <= N; i++) {
//leer datos de cada coche
System.out.println("Coche " + i);
System.out.print("Matrcula: ");
matricula = sc.nextLine();
System.out.print("Marca: ");
marca = sc.nextLine();
System.out.print("Modelo: ");
modelo = sc.nextLine();
System.out.print("Nmero de Kilmetros: ");
Km = sc.nextInt();
sc.nextLine(); //limpiar el intro
aux = new Coche(); //Se crea un objeto Coche y se asigna su referencia a aux
//se asignan valores a los atributos del nuevo objeto
aux.setMatricula(matricula);
aux.setMarca(marca);
aux.setModelo(modelo);
aux.setKm(Km);
coches.add(aux);
}
} //fin mtodo leerCoches()
//Mtodo para mostrar todos los coches de una marca que se pide por teclado
public static void mostrarPorMarca(){
String marca;
System.out.print("Introduce marca: ");
marca = sc.nextLine();
System.out.println("Coches de la marca " + marca);
for(int i = 0; i<coches.size(); i++){
if(coches.get(i).getMarca().equalsIgnoreCase(marca))
System.out.println(coches.get(i));
}
}
//Mtodo que muestra los coches ordenados por nmero de Km de menor a mayor
public static void mostrarOrdenadosPorKm(){
int i, j;
Coche aux;
for(i = 0; i< coches.size()-1; i++)
for(j=0;j<coches.size()-i-1; j++)
if(coches.get(j+1).getKm() < coches.get(j).getKm()){
aux = coches.get(j+1);
coches.set(j+1, coches.get(j));
coches.set(j, aux);
}
mostrarCoches();
}
} //fin de la clase principal
26 comentarios:
1.
evastos26 de julio de 2013, 22:59
Al transcribir las lineas de este cdigo me aparecen muchas alertas que
no logro arreglar. He desarrollado todos los ejercicios hasta aqu y
ninguno me ha arrojado tantas inconsistencias de cdigo. No se si es la
instalacin de NetBeans o no he importado las libreras correctas.
Requiero una respuesta por favor.
Responder
Respuestas
1.
ivania aguilar23 de octubre de 2013, 7:32
Este comentario ha sido eliminado por el autor.
2.
Annimo6 de mayo de 2014, 18:21
evastos, el cdigo esta completo, lo que llamas inconsistencias es
por la falta de las libreras adecuadas, pon algo de tu parte,
conchudo
Responder
2.
Javier Cambero3 de agosto de 2013, 19:46
Hola, me encuentro con el mismo problema que evastos, supongo que
es cosa de mis pocos conocimientos de JAVA. por ahora he ido
entendiendo todos los ejercicios y realizndolos yo mismo, pero en este
me he quedado encallado.
2.
Javier Cambero7 de agosto de 2013, 22:14
Gracias, ya me funciona :)
Responder
3.
Annimo27 de agosto de 2013, 22:14
Una pregunta:
cual es la diferencia entre:
}
y
public void setModelo(String modelo) {
modelo = modelo;
}
Responder
Respuestas
1.
int n;
for (int i = 0; i < numeros.length; i++) {
do {
n = rnd.nextInt(hasta - desde + 1) + desde;
} while (comprobarSiContiene(numeros, i, n));
numeros[i] = n;
}
return numeros;
}
public static boolean comprobarSiContiene(int[] numeros, int indice, int valor) {
for (int i = 0; i < indice; i++) {
if (numeros[i] == valor) {
return true;
}
}
return false;
}
Esta sera la solucin para aquellos que estn empezando a programar. Pero en este
caso nos podemos ahorrar trabajo utilizando la API de Java. En concreto utilizando un
ArrayList y el mtodo shuffle de Collections.
La idea es llenar un ArrayList con todos los nmeros comprendidos entre los lmites
desde/hasta. A continuacin se llama al mtodo shuffle para desordenarlos y despus
se pasan al array de enteros lostam primeros elementos, donde tam es el tamao del
array a devolver.
El mtodo utilizando el ArrayList y Collections.shuffle quedara as:
private static int[] llenarArrayAleatorio(int desde, int hasta, int tam) {
ArrayList<Integer> array = new ArrayList<Integer>();
for (int i = desde; i <= hasta; i++) {
array.add(i);
}
Collections.shuffle(array);
int [] numeros = new int[tam];
for(int i = 0; i<numeros.length; i++){
numeros[i]=array.get(i);
}
return numeros;
}
Matrices en Java
Un array en Java puede tener ms de una dimensin. El caso ms
general son los arrays bidimensionales tambin
llamados matrices o tablas.
La dimensin de un array la determina el nmero de ndices
necesarios para acceder a sus elementos.
Los vectores que hemos visto en otra entrada anterior son arrays
unidimensionales porque solo utilizan un ndice para acceder a cada
elemento.
Una matriz necesita dos ndices para acceder a sus elementos.
Grficamente podemos representar una matriz como una tabla de n
filas y m columnas cuyos elementos son todos del mismo tipo.
La siguiente figura representa un array M de 3 filas y 5 columnas:
INICIALIZAR MATRICES
Un array es un objeto, por lo tanto, cuando se crea, a sus elementos se les asigna
automticamente un valor inicial:
RECORRER MATRICES
Para recorrer una matriz se anidan dos bucles for. En general para
recorrer un array multidimensional se anidan tantas instrucciones for
como dimensiones tenga el array.
Ejemplo de recorrido de una matriz en Java:
Programa que lee por teclado nmeros enteros y los guarda en una
matriz de 5 filas y 4 columnas. A continuacin muestra los valores
ledos, el mayor y el menor y las posiciones que ocupan.
import java.util.*;
public class Bidimensional2 {
public static void main(String[] args) {
final int FILAS = 5, COLUMNAS = 4;
Scanner sc = new Scanner(System.in);
int i, j, mayor, menor;
int filaMayor, filaMenor, colMayor, colMenor;
int[][] A = new int[FILAS][COLUMNAS];
System.out.println("Lectura de elementos de la
matriz: ");
for (i = 0; i < FILAS; i++) {
for (j = 0; j < COLUMNAS; j++) {
System.out.print("A[" + i + "][" + j + "]=
");
A[i][j] = sc.nextInt();
}
}
System.out.println("valores introducidos:");
for (i = 0; i < A.length; i++) {
}
mayor = menor = A[0][0];//se toma el primero como
mayor y menor
filaMayor = filaMenor = colMayor = colMenor = 0;
for (i = 0; i < A.length; i++) { //
for (j = 0; j < A[i].length; j++) {
if (A[i][j] > mayor) {
mayor = A[i][j];
filaMayor = i;
colMayor = j;
} else if (A[i][j] < menor) {
menor = A[i][j];
filaMenor = i;
colMenor = j;
}
}
}
System.out.print("Elemento mayor: " + mayor);
System.out.println(" Fila: "+ filaMayor + "
Columna: " + colMayor);
System.out.print("Elemento menor: " + menor);
System.out.println(" Fila: "+ filaMenor + "
Columna: " + colMenor);
}
}
-
En este ejemplo se han utilizado dos formas distintas para recorrer la matriz:
utilizando en el for el nmero de filas y columnas
utilizando en el for el atributo length
Para recorrer arrays irregulares como el siguiente:
int [][] a = {{6,7,5,0,4}, {3, 8, 4}, {1,0,2,7}, {9,5}};
}
}
}
hay les va otro cdigo para lo mismo. tambin muestra las pasadas.
public class Burbuja {
package javaapplication11;
import java.util.Scanner;
public class JavaApplication11 {
public static void main(String[] args) {
int arr[]=new int [5];
Scanner sc=new Scanner(System.in);
for(int i=0;i<arr.length;i++)
{
System.out.println("ingrese numero "+ i);
arr[i]=sc.nextInt();
}
for(int i = 0; i < arr.length - 1; i++)
{ for(int j = 0; j < arr.length - 1; j++) {
if (arr[j] < arr[j + 1])
{
int tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
for (int i = 0; i < arr.length; i++) {
if (i==0) {
System.out.println("El mayor es: "+arr[i]);
}
else if (i==4) {
System.out.println("Y el Menor es: " +arr[i]);
}else
System.out.println("El siguiente es: "+arr[i]);
}
}
}
/////a qui les dejo uno chequenlo
import javax.swing.*;
public class burbuja{
static int arre[];
int n;
int aux ;
public burbuja(){
n=Integer.parseInt(JOptionPane.showInputDialog("dame el tamao de el
arreglo"));
arre=new int [n] ;
}
public void captura (){
int ele;
for (int i=0; i arre[j+1] ){
aux=arre[j];
arre[j]=arre[j+1];
arre[j+1]=aux;
}
}
}
}
public void imprimir(){
System.out.println ("el vector quedadela siguiente forma ");
for(int k=0; k<n;k++){
System.out.println ("elemento del vector "+k+" "+ arre[k]);
}
}
public static void main (String[] args) {
burbuja prueva=new burbuja();
prueva.captura();
prueva.ordenar ();
prueva.imprimir();
}
}
import java.util.StringTokenizer;
public class ContarPalabras {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String frase;
System.out.print("Introduce una frase: ");
frase = sc.nextLine();
StringTokenizer st = new StringTokenizer(frase);
System.out.println("Nmero de palabras: " + st.countTokens());
}
}
actual
}
return contador;
}
la frase solo tiene una palabra o est vaca. En ese caso se devuelve
una cadena vaca.
Si se encuentra el ltimo espacio en blanco, se obtiene un nuevo
String mediante el mtodo substring desde la primera posicin del
texto hasta donde se encuentra el ltimo espacio.
Para que esto funcione correctamente debemos asegurarnos de que
el texto no contiene espacios en blanco al final ya que si fuese as no
encontraramos la ltima palabra con este mtodo. Para eso se utiliza
el mtodo trim() que elimina posibles espacios en blanco al principio
y al final del String.
String texto;
do {
System.out.println("Introduce texto: ");
texto = sc.nextLine();
} while (texto.isEmpty());
texto = eliminarUltimaPalabra(texto);
System.out.println(texto);
}
3 comentarios:
1.
Annimo1 de marzo de 2015, 3:19
aqui busco la posicion del ultimo espacio y creo la nueva frase hasta la
posicion del espacio vacio... este es un metodo mas sencillo segun mi
parecer....
public class ExampleThree {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String Frase;
int pos = 0;
String Palabra="";
System.out.println("INGRESE LA FRASE:");
Frase=sc.nextLine();
Frase=Frase.trim();
for (int i = 0; i < Frase.length(); i++) {
if(Frase.substring(i, i+1).equals(" ")){
pos=i;
}
}
if(pos>0){
for (int i = 0; i < pos; i++) {
Palabra = Palabra + Frase.substring(i, i+1);
}
System.out.println("LA FRASE NUEVA ES: ");
System.out.println(Palabra);
}else{
System.out.println("LA FRASE ESTA VACIA");
}
}
}