lunes, 21 de mayo de 2018

Tutorial Java 19

Estructura de datos tipo matriz

Una matriz es una estructura de datos que permite almacenar un CONJUNTO de datos del MISMO tipo.
Con un único nombre se define la matriz y por medio de DOS subíndices hacemos referencia a cada elemento de la misma (componente)
matriz
Hemos graficado una matriz de 3 filas y 5 columnas. Para hacer referencia a cada elemento debemos indicar primero la fila y luego la columna, por ejemplo en la componente 1,4 se almacena el valor 97.
En este ejemplo almacenamos valores enteros. Todos los elementos de la matriz deben ser del mismo tipo (int, float, String etc.)
Las filas y columnas comienzan a numerarse a partir de cero, similar a los vectores.
Una matriz se la puede representar por un conjunto de vectores.

Problema 1:

Crear una matriz de 3 filas por 5 columnas con elementos de tipo int, cargar sus componentes y luego imprimirlas.

Programa:

import java.util.Scanner;
public class Matriz1 {
    private Scanner teclado;
    private int[][] mat;
    
    public void cargar() {
        teclado=new Scanner(System.in);
        mat=new int[3][5];
        for(int f=0;f<3;f++) {
            for(int c=0;c<5;c++) {
                System.out.print("Ingrese componente:");
                mat[f][c]=teclado.nextInt();
            }
        }
    }
    
    public void imprimir() {
        for(int f=0;f<3;f++) {
            for(int c=0;c<5;c++) {
                System.out.print(mat[f][c]+" ");
            }
            System.out.println();
        }
    }
    
    public static void main(String[] ar) {
        Matriz1 ma=new Matriz1();
        ma.cargar();
        ma.imprimir();
    }   
}
Para definir una matriz debemos antecederle los corchetes abiertos y cerrados dos veces:
    private int[][] mat;

De esta forma el compilador de Java puede diferenciar los vectores de las matrices.
Para crear la matriz, es decir hacer la reserva de espacio de todas sus componentes debemos utilizar el operador new y mediante dos subíndices indicamos la cantidad de filas y columnas que tendrá la matriz:
        mat=new int[3][5];
Luego debemos pasar a cargar sus 15 componentes (cada fila almacena 5 componentes y tenemos 3 filas)
Lo más cómodo es utilizar un for anidado, el primer for que incrementa el contador f lo utilizamos para recorrer las filas y el contador interno llamado c lo utilizamos para recorrer las columnas.
Cada vez que se repite en forma completa el for interno se carga una fila completa, primero se carga la fila cero en forma completa, luego la fila uno y finalmente la fila 2.
Siempre que accedemos a una posición de la matriz debemos disponer dos subíndices que hagan referencia a la fila y columna mat[f][c]):
        for(int f=0;f<3;f++) {
            for(int c=0;c<5;c++) {
                System.out.print("Ingrese componente:");
                mat[f][c]=teclado.nextInt();
            }
        }
Para imprimir la matriz de forma similar utilizamos dos for para acceder a cada elemento de la matriz:
        for(int f=0;f<3;f++) {
            for(int c=0;c<5;c++) {
                System.out.print(mat[f][c]+" ");
            }
            System.out.println();
        }
    }
Cada vez que se ejecuta todas las vueltas del for interno tenemos en pantalla una fila completa de la matriz, por eso pasamos a ejecutar un salto de línea (con esto logramos que en pantalla los datos aparezcan en forma matricial):
            System.out.println();

Problema 2:

Crear y cargar una matriz de 4 filas por 4 columnas. Imprimir la diagonal principal.
              x    -    -    -
              -    x    -    -
              -    -    x    -
              -    -    -    x

Programa:

import java.util.Scanner;
public class Matriz2 {
    private Scanner teclado;
    private int[][] mat;
    
    public void cargar() {
        teclado=new Scanner(System.in);
        mat=new int[4][4];
        for(int f=0;f<4;f++) {
            for(int c=0;c<4;c++) {
                System.out.print("Ingrese componente:");
                mat[f][c]=teclado.nextInt();
            }
        }
    }
    
    public void imprimirDiagonalPrincipal() {
        for(int k=0;k<4;k++) {
            System.out.print(mat[k][k]+" ");
        }
    }
    
    public static void main(String[] ar) {
        Matriz2 ma=new Matriz2();
        ma.cargar();
        ma.imprimirDiagonalPrincipal();
    }   
}
La definición, creación y carga de la matriz no varían con el ejemplo anterior.
Para imprimir la diagonal principal de la matriz lo más conveniente es utilizar un for que se repita 4 veces y disponer como subíndice dicho contador (los elementos de la diagonal principal coinciden los valores de la fila y columna):
        for(int k=0;k<4;k++) {
            System.out.print(mat[k][k]+" ");
        }

Problema 3:

Crear y cargar una matriz de 3 filas por 4 columnas. Imprimir la primer fila. Imprimir la última fila e imprimir la primer columna.

Programa:

import java.util.Scanner;
public class Matriz3 {
    private Scanner teclado;
    private int[][] mat;
    
    public void cargar() {
        teclado=new Scanner(System.in);
        mat=new int[3][4];
        for(int f=0;f<3;f++) {
            for(int c=0;c<4;c++) {
                System.out.print("Ingrese componente:");
                mat[f][c]=teclado.nextInt();
            }
        }
    }
    
    public void primerFila() {
     System.out.println("Primer fila de la matriz:");
        for(int c=0;c<4;c++) {
            System.out.println(mat[0][c]);
        }
    }
    
    public void ultimaFila() {
     System.out.println("Ultima fila de la matriz:");
        for(int c=0;c<4;c++) {
            System.out.println(mat[2][c]);
        }
    }
    
    public void primerColumna() {
     System.out.println("Primer columna:");
        for(int f=0;f<3;f++) {
            System.out.println(mat[f][0]);
        }
    }
    
    public static void main(String[] ar) {
        Matriz3 ma=new Matriz3();
        ma.cargar();
        ma.primerFila();
        ma.ultimaFila();
        ma.primerColumna();
    }   
}
Creamos una matriz de 3 filas y 4 columnas:
        mat=new int[3][4];
Luego de cargarla el primer método que codificamos es el que imprimime la primer fila. Disponemos un for para recorrer las columnas, ya que la fila siempre será la cero. Como son cuatro los elementos de la primer fila el for se repite esta cantidad de veces:
     System.out.println("Primer fila de la matriz:");
        for(int c=0;c<4;c++) {
            System.out.println(mat[0][c]);
        }
Para imprimir la última fila el algoritmo es similar, disponemos un for que se repita 4 veces y en el subíndice de la fila disponemos el valor 2 (ya que la matriz tiene 3 filas):
     System.out.println("Ultima fila de la matriz:");
        for(int c=0;c<4;c++) {
            System.out.println(mat[2][c]);
        }
Para imprimir la primer columna el for debe repetirse 3 veces ya que la matriz tiene 3 filas. Dejamos constante el subíndice de la columna con el valor cero:
     System.out.println("Primer columna:");
        for(int f=0;f<3;f++) {
            System.out.println(mat[f][0]);
        }

 

Tutorial Java 18

Vectores (ordenamiento con vectores paralelos)

Cuando se tienen vectores paralelos y se ordena uno de ellos hay que tener la precaución de intercambiar los elementos de los vectores paralelos.

Problema 1:

Confeccionar un programa que permita cargar los nombres de 5 alumnos y sus notas respectivas. Luego ordenar las notas de mayor a menor. Imprimir las notas y los nombres de los alumnos.

Programa:

import java.util.Scanner;
public class PruebaVector16 {
    private Scanner teclado;
    private String[] nombres;
    private int[] notas;
    
    public void cargar() {
        teclado=new Scanner(System.in);
        nombres=new String[5];
        notas=new int[5];
        System.out.println("Carga de nombres y notas");
        for(int f=0;f<nombres.length;f++) {
            System.out.print("Ingese el nombre del alumno:");
            nombres[f]=teclado.next();
            System.out.print("Ingrese la nota del alumno:");
            notas[f]=teclado.nextInt();
        }
    }        
    
    public void ordenar() {
        for(int k=0;k<notas.length;k++) {
            for(int f=0;f<notas.length-1-k;f++) {
                if (notas[f]<notas[f+1]) {
                    int auxnota;
                    auxnota=notas[f];
                    notas[f]=notas[f+1];
                    notas[f+1]=auxnota;
                    String auxnombre;
                    auxnombre=nombres[f];
                    nombres[f]=nombres[f+1];
                    nombres[f+1]=auxnombre;
                }
            }
        }
    }
        
    public void imprimir() {
    System.out.println("Nombres de alumnos y notas de mayor a menor");
        for(int f=0;f<notas.length;f++) {
            System.out.println(nombres[f] + " - " + notas[f]);
        }
    }        

    public static void main(String[] ar) {
        PruebaVector16 pv=new PruebaVector16();
        pv.cargar();
        pv.ordenar();
        pv.imprimir();
    }   
}
Definimos los dos vectores:
    private String[] nombres;
    private int[] notas;
Creamos los dos vectores paralelos con cinco elementos cada uno:
        nombres=new String[5];
        notas=new int[5];
En el proceso de ordenamiento dentro de los dos for verificamos si debemos intercambiar los elementos del vector notas:
        for(int k=0;k<notas.length;k++) {
            for(int f=0;f<notas.length-1-k;f++) {
                if (notas[f]<notas[f+1]) {
En el caso que la nota de la posición 'f' sea menor a de la posición siguiente 'f+1' procedemos a intercambiar las notas:
                    int auxnota;
                    auxnota=notas[f];
                    notas[f]=notas[f+1];
                    notas[f+1]=auxnota;
y simultánemamente procedemos a intercambiar los elementos del vector paralelo (con esto logramos que los dos vectores continuen siendo vectores paralelos):
                    String auxnombre;
                    auxnombre=nombres[f];
                    nombres[f]=nombres[f+1];
                    nombres[f+1]=auxnombre;
Como vemos utilizamos dos auxiliares distintos porque los elementos de los dos vectores son de distinto tipo (int y String)
Si deseamos ordenar alfabéticamente la condición dependerá del vector nombres.

 

Tutorial Java 17

Vectores (ordenamiento)

El ordenamiento de un vector se logra intercambiando las componentes de manera que:
vec[0] <= vec[1] <= vec[2] etc.
El contenido de la componente vec[0] sea menor o igual al contenido de la componente vec[1] y así sucesivamente.
Si se cumple lo dicho anteriormente decimos que el vector está ordenado de menor a mayor. Igualmente podemos ordenar un vector de mayor a menor.
Se puede ordenar tanto vectores con componentes de tipo int, float como String. En este último caso el ordenamiento es alfabético.

Problema 1:

Se debe crear un vector donde almacenar 5 sueldos. Ordenar el vector sueldos de menor a mayor.
ordenamiento de un vector
Esta primera aproximación tiene por objetivo analizar los intercambios de elementos dentro del vector.
El algoritmo consiste en comparar si la primera componente es mayor a la segunda, en caso que la condición sea verdadera, intercambiamos los contenidos de las componentes.
Vamos a suponer que se ingresan los siguientes valores por teclado:
1200
750
820
550
490
En este ejemplo: ¿es 1200 mayor a 750? La respuesta es verdadera, por lo tanto intercambiamos el contenido de la componente 0 con el de la componente 1.
Luego comparamos el contenido de la componente 1 con el de la componente 2: ¿Es 1200 mayor a 820?
La respuesta es verdadera entonces intercambiamos.
Si hay 5 componentes hay que hacer 4 comparaciones, por eso el for se repite 4 veces.
Generalizando: si el vector tiene N componentes hay que hacer N-1 comparaciones.
Cuando  f = 0  f = 1  f  = 2  f = 3
  
  750  750  750  750
  1200  820  820  820
  820  1200  550  550
  550  550  1200  490
  490  490  490  1200
Podemos ver cómo el valor más grande del vector desciende a la última componente. Empleamos una variable auxiliar (aux) para el proceso de intercambio:
aux=sueldos[f];
sueldos[f]=sueldos[f+1];
sueldos[f+1]=aux;
Al salir del for en este ejemplo el contenido del vector es el siguiente:
750
820
550
490
1200
Analizando el algoritmo podemos comprobar que el elemento mayor del vector se ubica ahora en el último lugar.
Podemos definir otros vectores con distintos valores y comprobar que siempre el elemento mayor queda al final.
Pero todavía con este algoritmo no se ordena un vector. Solamente está ordenado el último elemento del vector.
Ahora bien, con los 4 elementos que nos quedan podemos hacer el mismo proceso visto anteriormente, con lo cual quedará ordenado otro elemento del vector. Este proceso lo repetiremos hasta que quede ordenado por completo el vector.
Como debemos repetir el mismo algoritmo podemos englobar todo el bloque en otra estructura repetitiva.
ordenamiento de un vector
Realicemos una prueba del siguiente algoritmo:
Cuando k = 0
  f = 0  f = 1  f = 2  f = 3
  750  750  750  750
  1200  820  820  820
  820  1200  550  550
  550  550  1200  490
  490  490  490  1200
  
Cuando k = 1
  f = 0  f = 1  f  = 2  f = 3
  750  750  750  750 
  820  550  550  550
  550  820  490  490
  490  490  820  820
  1200  1200  1200  1200

Cuando k = 2
  f = 0  f = 1  f  = 2  f = 3
  550  550  550  550
  750  490  490  490
  490  750  750  750
  820  820  820  820
  1200  1200  1200  1200


Cuando k = 3
  f = 0  f = 1  f  = 2  f = 3
  490  490  490  490
  550  550  550  550
  750  750  750  750
  820  820  820  820
  1200  1200  1200  1200
¿Porque repetimos 4 veces el for externo?
Como sabemos cada vez que se repite en forma completa el for interno queda ordenada una componente del vector. A primera vista diríamos que deberíamos repetir el for externo la cantidad de componentes del vector, en este ejemplo el vector sueldos tiene 5 componentes.
Si observamos, cuando quedan dos elementos por ordenar, al ordenar uno de ellos queda el otro automáticamente ordenado (podemos imaginar que si tenemos un vector con 2 elementos no se requiere el for externo, porque este debería repetirse una única vez)
Una última consideración a este ALGORITMO de ordenamiento es que los elementos que se van ordenando continuamos comparándolos.
Ejemplo: En la primera ejecución del for interno el valor 1200 queda ubicado en la posición 4 del vector. En la segunda ejecución comparamos si el 820 es mayor a 1200, lo cual seguramente será falso.
Podemos concluir que la primera vez debemos hacer para este ejemplo 4 comparaciones, en la segunda ejecución del for interno debemos hacer 3 comparaciones y en general debemos ir reduciendo en uno la cantidad de comparaciones.
Si bien el algoritmo planteado funciona, un algoritmo más eficiente, que se deriva del anterior es el plantear un for interno con la siguiente estructura: (f=0 ; f<4-k; f++)
Es decir restarle el valor del contador del for externo.

Programa:

import java.util.Scanner;
public class PruebaVector13 {
    private Scanner teclado;
    private int[] sueldos;

    public void cargar() {
        teclado=new Scanner(System.in);
        sueldos=new int[5];
        for(int f=0;f<sueldos.length;f++) {
            System.out.print("Ingrese el sueldo:");
            sueldos[f]=teclado.nextInt();
        }
    }
 
    public void ordenar() {
        for(int k=0;k<4;k++) {
            for(int f=0;f<4-k;f++) {
                if (sueldos[f]>sueldos[f+1]) {
                    int aux;
                    aux=sueldos[f];
                    sueldos[f]=sueldos[f+1];
                    sueldos[f+1]=aux;
                }
            }
        }
    }
 
    public void imprimir() {
        System.out.println("Sueldos ordenados de menor a mayor.");
        for(int f=0;f<sueldos.length;f++) {
            System.out.println(sueldos[f]);
        }
    }
 
    public static void main(String[] ar) {
        PruebaVector13 pv=new PruebaVector13();
        pv.cargar();
        pv.ordenar();
        pv.imprimir();
    }
}
También podemos ordenar vectores cuyas componentes sean de tipo String. Para esto no podemos utilizar el operador > sino debemos utilizar un método de la clase String:
String cad1="juan";
String cad2="analia";
if (cad1.compareTo(cad2)>0)
{
  System.out.println(cad1 + " es mayor alfabéticamente que " + cad2);
}
El método compareTo retorna un valor mayor a cero si cad1 es mayor alfabéticamente. En este ejemplo cad1 tiene un valor alfabéticamente mayor a cad2, luego el compareTo retorna un valor mayor a cero.
Si los dos String son exactamente iguales el método compareTo retorna un cero, y finalmente si cad1 es menor alfabeticamente retorna un valor menor a cero.

Problema 2:

Definir un vector donde almacenar los nombres de 5 paises. Confeccionar el algoritmo de ordenamiento alfabético.

Programa:

import java.util.Scanner;
public class PruebaVector14 {
    private Scanner teclado;
    private String[] paises;
 
    public void cargar() {
        teclado=new Scanner(System.in);
        paises=new String[5];
        for(int f=0;f<paises.length;f++) {
            System.out.print("Ingrese el nombre del pais:");
            paises[f]=teclado.next();
        }
    }

    public void ordenar() {
        for(int k=0;k<4;k++) {
            for(int f=0;f<4-k;f++) {
                if (paises[f].compareTo(paises[f+1])>0) {
                    String aux;
                    aux=paises[f];
                    paises[f]=paises[f+1];
                    paises[f+1]=aux;
                }
            }
        }
    }
 
    public void imprimir() {
     System.out.println("Paises ordenados en forma alfabética:");
        for(int f=0;f<paises.length;f++) {
            System.out.println(paises[f]);
        }
    }

    public static void main(String[] ar) {
        PruebaVector14 pv=new PruebaVector14();
        pv.cargar();
        pv.ordenar();
        pv.imprimir();
    }
}
Definimos un vector de tipo String:
    private String[] paises;
Lo creamos indicando que almacenará cinco elementos:
        paises=new String[5];
Procedemos a cargar el vector:
        for(int f=0;f<paises.length;f++) {
            System.out.print("Ingrese el nombre del pais:");
            paises[f]=teclado.next();
        }
Para el ordenamiento utilizamos el método compareTo para verificar si tenemos que intercambiar las componentes:
                if (paises[f].compareTo(paises[f+1])>0) {
En el caso que si tenemos que intercambiarla utilizamos un auxilir de tipo String:
                    String aux;
                    aux=paises[f];
                    paises[f]=paises[f+1];
                    paises[f+1]=aux;

 

Tutorial Java 16

Vectores (mayor y menor elemento)

Es una actividad común la búsqueda del mayor y menor elemento de un vector, lo mismo que su posición.
vector
El mayor elemento es el 820 y se encuentra en la posición nº 2.

Problema 1:

Confeccionar un programa que permita cargar los nombres de 5 operarios y sus sueldos respectivos. Mostrar el sueldo mayor y el nombre del operario.

Programa:

import java.util.Scanner;
public class PruebaVector11 {
    private Scanner teclado;
    private String[] nombres;
    private float[] sueldos;

    public void cargar() {
        teclado=new Scanner(System.in);
        nombres=new String[5];
        sueldos=new float[5];
        for(int f=0;f<nombres.length;f++) {
            System.out.print("Ingrese el nombre del empleado:");
            nombres[f]=teclado.next();
            System.out.print("Ingrese el sueldo:");
            sueldos[f]=teclado.nextFloat();
        }
    }
    
    public void mayorSueldo() {
        float mayor;
        int pos;
        mayor=sueldos[0];
        pos=0;
        for(int f=1;f<nombres.length;f++) {
            if (sueldos[f]>mayor) {
                mayor=sueldos[f];
                pos=f;
            }
        }
        System.out.println("El empleado con sueldo mayor es "+nombres[pos]);
        System.out.println("Tiene un sueldo:"+mayor);
    }
    
    public static void main(String[] ar) {
        PruebaVector11 pv=new PruebaVector11();
        pv.cargar();
        pv.mayorSueldo();
    }
}
Definimos los dos vectores paralelos donde almacenaremos los nombres y los sueldos de los operarios:
 private String[] nombres;
 private float[] sueldos;
Creamos los dos vectores y procedemos a cargar sus elementos:
        nombres=new String[5];
        sueldos=new float[5];
        for(int f=0;f<nombres.length;f++) {
            System.out.print("Ingrese el nombre del empleado:");
            nombres[f]=teclado.next();
            System.out.print("Ingrese el sueldo:");
            sueldos[f]=teclado.nextFloat();
        }
Para obtener el mayor sueldo y el nombre del operario realizar los siguientes pasos:
Inicializamos una variable mayor con la primer componente del vector sueldos:
        mayor=sueldos[0];
Inicializamos una variable pos con el valor 0, ya que decimos primeramente que el mayor es la primer componente del vector:
        pos=0;
Recorremos las componentes del vector que faltan analizar, o sea, de la 1 a la 4:
        for(int f=1;f<nombres.length;f++) {
Accedemos a cada componente para controlar si supera lo que tiene la variable mayor:
            if (sueldos[f]>mayor) {
En caso de ser verdadera la condición asignamos a la variable mayor este nuevo valor sueldos[f]
                mayor=sueldos[f];
y a la variable pos le cargamos la variable f que indica la componente que estamos analizando:
                pos=f
Cuando salimos de la estructura repetitiva imprimimos la variable mayor que contiene el mayor sueldo y para imprimir el nombre del operario conociendo la posición del mayor sueldo imprimimos el elemento que ocupa la posición que indica la variable pos en el vector paralelo:
        System.out.println("El empleado con sueldo mayor es "+nombres[pos]);
        System.out.println("Tiene un sueldo:"+mayor);

 

Tutorial Java 15

Vectores paralelos

Este concepto se da cuando hay una relación entre las componentes de igual subíndice (misma posición) de un vector y otro.
vectores paralelos
Si tenemos dos vectores de 5 elementos cada uno. En uno se almacenan los nombres de personas en el otro las edades de dichas personas.
Decimos que el vector nombres es paralelo al vector edades si en la componente 0 de cada vector se almacena información relacionada a una persona (Juan - 12 años)
Es decir hay una relación entre cada componente de los dos vectores.
Esta relación la conoce únicamente el programador y se hace para facilitar el desarrollo de algoritmos que procesen los datos almacenados en las estructuras de datos.

Problema 1:

Desarrollar un programa que permita cargar 5 nombres de personas y sus edades respectivas. Luego de realizar la carga por teclado de todos los datos imprimir los nombres de las personas mayores de edad (mayores o iguales a 18 años)

Programa:

import java.util.Scanner;
public class PruebaVector10 {
    private Scanner teclado;
    private String[] nombres;
    private int[] edades;
    
    public void cargar() {
        teclado=new Scanner(System.in);
        nombres=new String[5];
        edades=new int[5];
        for(int f=0;f<nombres.length;f++) {
            System.out.print("Ingrese nombre:");
            nombres[f]=teclado.next();
            System.out.print("Ingrese edad:");
            edades[f]=teclado.nextInt();            
        }
    }    
    
    public void mayoresEdad() {
        System.out.println("Personas mayores de edad.");
     for(int f=0;f<nombres.length;f++) {
            if (edades[f]>=18) {
                System.out.println(nombres[f]);
            }
     }    
    }
    
    public static void main(String[] ar) {
        PruebaVector10 pv=new PruebaVector10();
        pv.cargar();
        pv.mayoresEdad();
    }    
}
Definimos los dos vectores:
    private String[] nombres;
    private int[] edades;
Creamos los dos vectores con 5 elementos cada uno:
        nombres=new String[5];
        edades=new int[5];
Mediante un for procedemos a la carga de los elementos de los vectores:
        for(int f=0;f<nombres.length;f++) {
            System.out.print("Ingrese nombre:");
            nombres[f]=teclado.next();
            System.out.print("Ingrese edad:");
            edades[f]=teclado.nextInt();            
        }
Podemos utilizar el length de cualquiera de los dos vectores, ya que tienen el mismo tamaño.
Para imprimir los nombres de las personas mayores de edad verificamos cada componente del vector de edades, en caso que sea igual o mayor o 18 procedemos a mostrar el elemento de la misma posición del otro vector:
     for(int f=0;f<nombres.length;f++) {
            if (edades[f]>=18) {
                System.out.println(nombres[f]);
            }
     }    

 

Tutorial Java 14

Vector (Tamaño de un vector)

Como hemos visto cuando se crea un vector indicamos entre corchetes su tamaño:
  sueldos=new int[5];
Luego cuando tenemos que recorrer dicho vector disponemos una estructura repetitiva for:
    for(int f=0;f<5;f++) {
        System.out.print("Ingrese valor de la componente:");
        sueldos[f]=teclado.nextInt();
    } 
Como vemos el for se repite mientras el contador f vale menos de 5. Este estructura repetitiva es idéntica cada vez que recorremos el vector.
Que pasa ahora si cambiamos el tamaño del vector cuando lo creamos:
  sueldos=new int[7];
Con esto tenemos que cambiar todos los for que recorren dicho vector. Ahora veremos que un vector al ser un objeto tiene un atributo llamado length que almacena su tamaño. Luego podemos modificar todos los for con la siguiente sintaxis:
    for(int f=0;f<sueldos.length;f++) {
        System.out.print("Ingrese valor de la componente:");
        sueldos[f]=teclado.nextInt();
    } 
También podemos pedir al usuario que indique el tamaño del vector en tiempo de ejecución, en estos casos se hace imprescindible el empleo del atributo length.

Problema 1:

Se desea almacenar los sueldos de operarios. Cuando se ejecuta el programa se debe pedir la cantidad de sueldos a ingresar. Luego crear un vector con dicho tamaño.

Programa:

import java.util.Scanner;
public class PruebaVector8 {
    private Scanner teclado;
    private int[] sueldos;
 
    public void cargar()
    {
        teclado=new Scanner(System.in);
        System.out.print("Cuantos sueldos cargará:");
        int cant;
        cant=teclado.nextInt();
        sueldos=new int[cant];
        for(int f=0;f<sueldos.length;f++) {
            System.out.print("Ingrese sueldo:");
            sueldos[f]=teclado.nextInt();
        } 
    }
 
    public void imprimir() {
        for(int f=0;f<sueldos.length;f++) {
            System.out.println(sueldos[f]);
        }
    }
 
    public static void main(String[] ar) {
        PruebaVector8 pv=new PruebaVector8();
        pv.cargar();
        pv.imprimir();
    }
}
La definición del vector no varía:
    private int[] sueldos;
Luego para la creación del mismo ingresamos una variable entera y la utilizamos como subíndice en el momento de la creación del vector:
        System.out.print("Cuantos sueldos cargará:");
        int cant;
        cant=teclado.nextInt();
        sueldos=new int[cant];
Luego las estructuras repetitivas las acotamos accediendo al atributo length del vector:
        for(int f=0;f<sueldos.length;f++) {
            System.out.print("Ingrese sueldo:");
            sueldos[f]=teclado.nextInt();
        } 
 
Fuente: http://www.tutorialesprogramacionya.com/javaya/