Problema para contar elementos de un vector

Iniciado por _SainT_, 23 Agosto 2011, 19:42 PM

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

_SainT_

Hola gente, me han dado un TP, y necesito ayuda en un punto. Dice asi :


3. Informar la cantidad total de metros construidos que hay en cada una de las zonas.

Es un trabajo sobre unas viviendas, cada vivienda es un objeto , y el vector es un vecto de objetos. El problema es qe las zonas, (son numeros del 1 al 20), se pueden repetir en cualquier lado, y no se como sumar la cantidad de metros, relacionada a la misma zona. Probe con hacer dos for anidados, pero se me repite muchas veces, porque compara todos los elementos con todos los elementos, no se como contar elementos distintos, ni elementos que se repiten. Aca les dejo el codigo de como es el objeto vivienda, y el metodo para cargar . No hace falta que me escriban un codigo, solo necesitaria saber como hacer para evitar ese error o un pseudocodigo. Muchas gracias :)


Código (java) [Seleccionar]

public class Vivienda
{
   private int numero;
   private int tipo;
   private int zona;
   private float metrosConstruidos;
   private float preciom2;
   
   public Vivienda(int a, int b, int c, float d, float e)
   {
       numero=a;
       tipo=b;
       zona=c;
       metrosConstruidos=d;
       preciom2=e;
   }
   
   public int getZona()
   {
       return zona;
   }
   public float getMetrosConstruidos()
   {
       return metrosConstruidos;
   }
   public int getTipo()
   {
       return tipo;
   }
   public float getPreciom2()
   {
       return preciom2;
   }
                   //este es el objeto vivienda,


public class RegistroVivienda
{
   private Vivienda vec[];
   
   public RegistroVivienda(int tamaño)
   {
       vec=new Vivienda[tamaño];
   }
   
   public void CargarDatos()
   {
       int number;
       int tipo;
       int zone;
       float metros;
       float precio;
       for(int i=0;i<vec.length;i++)
       {
           System.out.println("Ingrese el numero de vivienda");
           number=In.readInt();
           System.out.println("Ingrese el tipo de vivienda: 0/1/2");
           tipo=In.readInt();
           if(tipo<0 || tipo>=3)
           {
               System.out.println("El tipo ingresado no es correcto");
               break;
           }
           System.out.println("Ingrese la zona");
           zone=In.readInt();
           System.out.println("Ingrese los metros cuadrados de la vivienda");
           metros=In.readFloat();
           System.out.println("Ingrese el precio por metro cuadrado");
           precio=In.readFloat();
           vec[i]=new Vivienda(number,tipo,zone,metros,precio);
       }
   }
}
// aca va el metodo que necesito.






Valkyr

Pues supongo que tendrías que recorrer el array de viviendas, y para cada zona (dices que van del 1 al 20) ver qué viviendas están en dicha zona y coger sus metros y sumarlos en una variable.

Código (java) [Seleccionar]

public int[] getMetros(){
    int[] resultado = new int[21];
    for(int i = 1;i < 21;i++)
        resultado[i] = 0;
    for(int i = 0;i < vec.length();i++){
        int aux = vec[i].getZona();
        if(aux>0 && aux<21)
            resultado[aux] += vec[i].getMetrosConstruidos();
    }
    return resultado;
}


En el array resultado vamos a guardar los metros construidos que tiene cada zona. Lo he construido con indice 21 para poder almacenar los datos desde la posición 1 (que representará la zona 1) hasta la posición 20 (que representará la zona 20). El primer bucle es para inicializar las posiciones del array . El siguiente bucle lo que hace es recorrer el array vec, y para cada vivienda coge su zona, si la zona es un valor correcto entonces se va al array resultado e incrementa los metros de esa zona.

No se si era a esto a lo que te referías, si no es así, comentalo.

Saludos.

_SainT_

#2
Ahora lo pruebo y te respondo. Lo que no se , (debe ser porque no me doy cuenta), si por ejemplo , la zona 2 se repite en al posicion 0 5 y 95 del vector, el metodo guardara los metros cuadrados de la zona 2 de la posicion 0 5 y 95, en una sola posicion del nuevo vector resultado.

El codigo sirve cuando tenes numeradas las zonas del 1 al 20 , pero yo lei mal la consigna, dice que son 20 zonaas distintas, pero puede ser cualqueir numero, mientras sean 20 numeros distintos, por eso no me sale, igual muchas gracias :)

[u]nsigned

Hola, bueno quiero aclarar que recien ayer empece con Java  :xD asi que se me ocurrio pasar por este foro e ir leyendo post com para reforzar lo que eh leido. Creo que tenes un error sintactico:

Código (java,3) [Seleccionar]
public class RegistroVivienda
{
    private Vivienda vec[];

    public RegistroVivienda(int tamaño)
    {
        vec=new Vivienda[tamaño];
    }


Si pretendes declarar un array de typo 'Vivienda' deberia ser:

Código (java) [Seleccionar]
private Vivienda[] vec;

Ademas no te recomiendo usar letras no ascii ('ñ' por ejemplo') en nombres de variables... ;)

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

_SainT_

No amigo, no es un error sintactico, se puede colocar los [] de ambas formas :D, puede que tengas razon con lo de las ñ, pero por el momento funciona xD.