Array multidimensional

Iniciado por adriana305, 14 Junio 2014, 09:57 AM

0 Miembros y 1 Visitante están viendo este tema.

adriana305

Hola a todos !!
Estoy resolviendo unos ejercicios sobre este array
Una Empresa de Software tiene N empleados (Máximo = 100). Se consideran de cada
uno de ellos los siguientes datos:

Legajo: ENTERO
Apellido y nombre: CADENA DE CARACTERES
Remuneración anual: NUMERO REAL

Desarrolle un programa con las funciones o métodos necesarios para que admita las
siguientes opciones desde un menú:
a. Ingreso de los datos de los empleados en 3 arreglos unidimensionales de hasta 100
elementos cada uno. Un arreglo para cada dato.
b. Impresión de la lista de empleados ordenada por legajo, en forma creciente, con todos
sus datos.
c. Búsqueda de un empleado por su legajo. En caso de no pertenecer a la Empresa,
indicarlo expresamente.
d. Impresión de la lista de empleados ordenada por Apellido y nombre, en forma creciente,
con todos sus datos
e. Impresión del Nombre y apellido, Legajo y Remuneración anual del empleado con menor
remuneración (considere que hay uno sólo).
f. Salida del programa.

Esto es lo que voy avanzando hasta ahora, pero no me compila !!
import java.util.Scanner;
class Test {
static Scanner leer = new Scanner(System.in);
static int cant_elementos = 100;
static int[] legajo = new int[cant_elementos];
static String[] apenomb = new String[cant_elementos];
static double[] salario = new double[cant_elementos];

public static void main(String[] args) {
int flag = 0;
while (flag == 0) {

switch (inicio()) {
case 0: flag = 1; break;
case 1: registro(); break;
case 2: imprimir(); break;
case 3: busqueda(); break;
case 4: ordenar(); break;
case 5: salariomenor(); break;

default:System.out.println("Seleccione una opcion valida."); break;
}
}
}
public static int inicio() {

System.out.println(" M E N U de O P C I N E S ");
System.out.println(" 1- Ingresar datos de empleados: ");
System.out.println(" 2- Imprimir lista ordenada por legajo: ");
System.out.println(" 3- Busqueda por legajo: ");
System.out.println(" 4- Ordenar por apellido los datos de los empleados de la empresa ");
System.out.println(" 5- Mostrar datos del empleado con menor remuneracion ");
System.out.println(" 0- Programa Finalizado.");
System.out.println(" Ingrese una opcion valida: ");
return leer.nextInt();
}

public static void registro() {
System.out.println("Ingrese legajo:");
int le = leer.nextInt();
System.out.println("Ingrese Apellidos y nombres:");
String an = leer.next();
System.out.println("Ingrese sueldo:");
double sa = leer.nextDouble();
legajo[le] = le;
apenomb[le] = an;
salario[le] = sa;
}

public static void imprimir() {
for (int i = 0; i < cant_elementos; i++) {
if (legajo[i] > 0) {
System.out.println(legajo[i] + "-" + apenomb[i] + "-" + salario[i]);
}
}
}

public static void busqueda() {
System.out.println("Ingrese el numero de legajo que quiere buscar: ");
int nro = leer.nextInt();

if (legajo[nro] > 0) {
System.out.println(legajo[nro] + "-" + apenomb[nro] + "-" + salario[nro]);

if (legajo[nro] != 0) {
System.out.println("Legajo no corresponde a un empleado de la empresa");
}
}
}
public static void ordenar() {
for(int i = 0; i < cant_elementos -1; i++){
int ii = 0;

for(int j=i+1;j < cant_elementos;j++){
if(legajo[j]<legajo[ii]){
ii=j;

if(i != ii){
int a = legajo[i];
legajo[i] = legajo[ii];
legajo[ii] = a;

int c = apenomb[i];
apenomb[i] = apenomb[ii];
apenomb[ii] = c;

double s = salario[i];
salario[i] = salario[ii];
salario[ii] = s;
}
}
}
}
}
public static void salariomenor() {
int ii = 0;
double salariomenor = salario[0];

for(int i=0; i < cant_elementos;i++){
if(salario[i] < salariomenor){
ii = i;
salariomenor = salario[i];
}
}
printLine("");
printLine("");
printLine("-----------------------------------------------");
printLine("Datos del empleado de menor sueldo: ");
printLine("Legajo: " + legajo[ii] + "\tNombre y apellido: " + apenomb[ii] + "\tSueldo: " + salario[ii]);
}
}

me tira estos errores D:
error: incompatible types (lineas 83-85)
error: cannot find symbol (lineas 106 a 109)

Me estoy volviendo loca con array.
Me podrian dar una manito en solucionar estos errores por favor.
Y si alguno conoce algun tutorial o ejercicios sobre array nxm por favor!!
Muchisimas gracias de antemano!!

nolasco281

#1
Hola si pusieras etiquetas Geshi donde se ponen las negritas hay un apartado con ese nombre elige Java. ya que mencionas la linea (lineas 83-85) pero no creo que alquien las cuente.

con respecto al error: incompatible types eso significa que los valores que estas pasando no son compatibles que significa esto.

Si una funcion recibe un valor tipo entero y tu le pasas una string son incompatibles deberas de convertir la cadena a entero para que la funcion o metodo se realice correctamente.

si no me equivoco el error a de andar por aca ya que del decis un entero c = apenomb. Y apenomb esta declaraco como String asi que queres llenar un arreglo de string con enteros como dige antes si eso es lo que deceas hacer deberas de convertir c. y luego hacer la igualdad

Código (java) [Seleccionar]
int c = apenomb; //Oh no se si quisiste hacer String c = apenomb;
apenomb[i] = apenomb[ii];
apenomb[ii] = c;


Saludos cuidate para la proxima etiquetas Geshi java.
Lo que se puede imaginar... se puede programar.

adriana305

#2
Holaa logre solucionar el problemas muchisimas gracias !!!
Ahora ando haciendo otro y encontre unos pequeños errores ._.
Desarrollar un programa Java que permita ingresar los votos obtenidos por cada uno de los N candidatos a Gobernador de una provincia, en cada uno de los M distritos de la misma. El programa deberá:
a) Imprimir una tabla (matriz de orden N x M ) distritos vs. candidatos con los votos emitidos.
b) Calcular e imprimir el número total de votos recibidos por cada candidato y el porcentaje del total de votos emitidos. Asimismo, deberá visualizar el candidato más votado.
c) Si algún candidato recibe más del 50% de los votos, el programa imprimirá un mensaje declarándole ganador.
d) Si ningún candidato recibe más del 50% de los votos, el programa debe imprimir los dos candidatos más votados.

La a si me cumple, en la b me muestra al menos votado en lugar del mas votado ._., en la c me manda al perdedor como ganador ._., y la d me manda al menos votado tambien ._.

Código (java) [Seleccionar]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Elecciones {

private int N;
private int M;
private int CANDIDATOS_BALOTAJE = 2;
private double PORC_MIN_GANADOR = 0.5;
private String[] CANDIDATOS;
private String[] DISTRITOS;
private int[][] ESCRUTINIO;
private int[] VOTOS_X_CANDIDATO;
private BufferedReader in;
public static byte IZQUIERDA = (byte) 0;
public static byte DERECHA = (byte) 1;

public Elecciones() throws IOException {
N = leerInt("Introduzca la cantidad de candidatos: ");
M = leerInt("Introduzca la cantidad de distritos: ");
CANDIDATOS = new String[N];
DISTRITOS = new String[M];
ESCRUTINIO = new int[DISTRITOS.length][CANDIDATOS.length];
VOTOS_X_CANDIDATO = new int[CANDIDATOS.length];
for (int i = 0; i < N; i++) {
CANDIDATOS[i] = "Candidato" + (i + 1);
}
for (int i = 0; i < M; i++) {
DISTRITOS[i] = "Distrito" + (i + 1);
}
}

private String leer(String m) throws IOException {
if (in == null) {
in = new BufferedReader(new InputStreamReader(System.in));
}
if (m != null) {
System.out.print(e);
}
return in.readLine();
}

private int leerInt(String m) throws IOException {
return Integer.parseInt(leer(e));
}

void cargarDatos() throws IOException {
System.out.println("\nIngrese la cantidad de votos obtenidos");
for (int j = 0; j < DISTRITOS.length; j++) {
String distrito = DISTRITOS[j];
String linea = repetir('-', distrito.length());
System.out.println(linea);
System.out.println(distrito);
System.out.println(linea);
for (int i = 0; i < CANDIDATOS.length; i++) {
ESCRUTINIO[j][i] = leerInt(CANDIDATOS[i] + ": ");
}
}
}

public void mostrar() throws IOException {
leer("\nDatos ingresados correctamente. **Presione enter para continuar.");
System.out.println(repetir('-', (CANDIDATOS.length + 1) * 12));
System.out.println(" " + centrar("Candidatos", CANDIDATOS.length * 12));
System.out.println(repetir('-', (CANDIDATOS.length + 1) * 12));
System.out.print(alinear("Distritos", 12, IZQUIERDA));
for (int i = 0; i < N; i++) {
System.out.print(alinear(CANDIDATOS[i], 12, DERECHA));
}
System.out.println("\n" + repetir('-', (CANDIDATOS.length + 1) * 12));
for (int j = 0; j < DISTRITOS.length; j++) {
System.out.print(alinear(DISTRITOS[j], 12, IZQUIERDA));
for (int i = 0; i < CANDIDATOS.length; i++) {
System.out.print(alinear("" + ESCRUTINIO[j][i], 12, DERECHA));
}
System.out.println();
}
System.out.println(repetir('-', (CANDIDATOS.length + 1) * 12));
}

public void votosPorCandidato() {
double total = 0;
for (int j = 0; j < ESCRUTINIO.length; j++) {
for (int i = 0; i < CANDIDATOS.length; i++) {
int v = ESCRUTINIO[j][i];
VOTOS_X_CANDIDATO[i] += v;
total += v;
}
}
int mas_votado = -1;
int ganador = -1;
System.out.println("\nTotal de votos recibidos para cada candidato y su porcentaje");
System.out.println(repetir(' ', 12) + centrar("Votos", 12) + centrar("Porcentaje", 12));
int[] clasificacion = clasificarCandidatosPorVoto();
for (int i = clasificacion.length - 1; i >= 0; i--) {
int j = clasificacion[i];
int votos = VOTOS_X_CANDIDATO[j];
double porc = votos / total;
if (mas_votado < 0 || votos < VOTOS_X_CANDIDATO[mas_votado]) {
mas_votado = i;
}
if (porc > PORC_MIN_GANADOR) {
ganador = i;
}
System.out.print(alinear(CANDIDATOS[j], 12, IZQUIERDA));
System.out.print(alinear(votos, 12, DERECHA));
System.out.println(alinear(String.format("%3.2f%%" , porc * 100), 12, DERECHA));
}
if (mas_votado > 0) {
System.out.println("\nEl candidato mas votado: ");
System.out.println("\t" + CANDIDATOS[mas_votado] + ": " + VOTOS_X_CANDIDATO[mas_votado]);
}
if (ganador > 0) {
System.out.println("\nResulto ganador el:");
System.out.println("\t" + CANDIDATOS[ganador] + ": " + VOTOS_X_CANDIDATO[ganador]);
} else {
System.out.println("\nLos dos mas votados fueron:");
for (int i = clasificacion.length - 1; i >= 0 && i + CANDIDATOS_BALOTAJE >= clasificacion.length; i--) {
System.out.println("\t" + CANDIDATOS[clasificacion[i]]);
}
}
}

private void copiarArray(int[] orig, int[] dest) {
for (int i = 0; i < orig.length; i++) {
orig[i] = dest[i];
}
}

private int[] clasificarCandidatosPorVoto() {
int[] vxc = new int[VOTOS_X_CANDIDATO.length];
int[] clasificacion = new int[VOTOS_X_CANDIDATO.length];
for (int i = 0; i < clasificacion.length; i++) {
clasificacion[i] = i;
}
copiarArray(vxc, VOTOS_X_CANDIDATO);
int j;
for (int i = 1; i < vxc.length; i++) {
int votos = vxc[i];
int cand = clasificacion[i];
j = i;
while (j > 0 && votos < vxc[j - 1]) {
vxc[j] = vxc[j - 1];
clasificacion[j] = clasificacion[j - 1];
j--;
}
vxc[j] = votos;
clasificacion[j] = cand;
}
return clasificacion;
}

public String repetir(char ch, int cant) {

char[] chars = new char[cant];

for (int i = 0; i < cant; i++) {
chars[i] = ch;
}

return new String(chars);
}

public String alinear(int nro, int ancho, byte alineacion) {
return alinear(String.valueOf(nro), ancho, alineacion);
}

public String alinear(String texto, int ancho, byte alineacion) {

if (texto == null) {
return repetir(' ', ancho);
}

if (texto.length() > ancho) {
return texto.substring(0, ancho);
}

if (alineacion == DERECHA) {
return repetir(' ', ancho - texto.length()) + texto;
} else {
return texto + repetir(' ', ancho - texto.length());
}
}

public String centrar(String texto, int ancho) {
if (texto == null) {
return repetir(' ', ancho);
}
if (texto.length() >= ancho) {
return texto.substring(0, ancho);
}
String s = repetir(' ', (ancho - texto.length()) / 2) + texto;
return s + repetir(' ', ancho - s.length());
}

public static void main(String[] args) throws Exception {
Elecciones e = new Elecciones();
e.cargarDatos();
e.mostrar();
e.votosPorCandidato();
}
}

Muchisimas gracias !!!  ya lo modifique, disculpa u.u

nolasco281

Hola repito usa etiquetas Geshi y selecciona Java. Saludos cuando las uses te empesaremos a ayudar.

Ya que le facilitas el trabajo a la persona que intenta ayudarte.

Saludos
Lo que se puede imaginar... se puede programar.

adriana305

ya cambie la etiqueta disculpa ._.