problema con array , al intentar rellenarlo con datos de otra clase

Iniciado por robertofd1995, 24 Noviembre 2013, 20:59 PM

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

robertofd1995

pues verán el enunciado es este :

Implementar una clase película con las siguientes propiedades:

sala: array (bidimensional) que almacena las entradas asociadas a las
butacas de la sala.  




 
nombrePelicula: string que almacena el nombre de la película
nombreSala: string que almacena el nombre de la sala ("sala1" o
"sala2")
precioEntrada: double que almacena el precio de la entrada aplicado
ya el descuento.
recaudación: double que almacena el total recaudado en la
proyección de la película.

Esta clase deberá incluir los siguientes métodos:

1. Un constructor con los parámetros nombrePelicula,
nombreSala y descuento).
El parámetro descuento es un entero en el rango [0-100] e indica el
porcentaje de descuesto que se debe aplicar al pecio de las entradas.
2. Métodos set y get para todos los atributos
3. Método generarEntradas. Crea una entrada para cada una de las
butacas de la sala. Para determinar si una entrada es gratuita se
genera un número aleatorio entre 0 y el número máximo de entradas.
Si este número es múltiplo de 7, la entrada será gratuita, si no el precio
de esa entrada será el precio marcado por la película (valor de la
propiedad precioEntrada). Este método debe ser privado.
Cuando se generan las entradas, la propiedad vendida tendrá valor
false.
4. Método mostarOcupacion. Muestra por consola la ocupación de la
sala que indique el parámetro. Si una butaca está ocupada se visualiza
"O" si está libre se visualiza "L".

mi codigo es este el 4 metodo todavia no lo tengo , el que me esta generando problemas es el 3

import java.util.Random;

public class Film
{
    // instance variables - replace the example below with your own
    public int[][] room;
    String filmName,roomName;
    double ticketPrice,income,discount;
    Ticket t ;
    public final static int columns=10,rows=10,MAX_FREE=10;
    public final static double Price=7.50;

    /**
     * Constructor for objects of class Film
     */
    public Film(String filmName,String roomName,double discount)
    {
        // initialise instance variables
        setFilmName(filmName);
        setRoomName(roomName);
        setDiscount(discount);
       
    }

   
    public void setFilmName(String filmName)
    {
        this.filmName=filmName;
       
    }
   
    public void setRoomName(String roomName)
    {
        this.roomName=roomName;
       
    }
   
    private void setTicketPrice(double ticketPrice)
    {
     this.ticketPrice=ticketPrice;
       
    }
   
    public void setDiscount(double discount)
    {
     this.discount=discount;
       
    }
   
    public String getFilmName(){return filmName;}
   
    public String getroomName(){return roomName;}
   
    public double getTicketPrice(){return ticketPrice;}
       
    public double getDiscount(){return discount;}
       
    public double getIncome(){return income;}
   
    public void generateTickets(String id,String description)
    {
        Random  numberGenerator = new Random();
             int value=(numberGenerator.nextInt(MAX_FREE+1));
             int ticket=0;
    if (roomName=="room1"||roomName=="ROOM1")
        {     
             room=new int[10][40];
             
             for (ticket=0;ticket<=(10*40);ticket++){
             
             if(value%7==0)
             setTicketPrice(0);
             else
             {
                 t=new Ticket(id,description,Price,false);
                 
                 
                }
             
             
            }
      }
        if (roomName=="room2"||roomName=="ROOM2")
        {
         room=new int[15][35];
         for (ticket=0;ticket<=15*35;ticket++){
           {
             t=new Ticket(id,description,Price,false);
             
             
            }
                     
       }
       
  }

}
}


alguien me puede ayudar y explicar como deberia ser

un saludo y gracias de antemano

Mitsu

No entiendo bien tu código, además no puedo saber qué métodos y atributos tiene Ticket, pero yo lo haría así:

Código (=java) [Seleccionar]

Tickets[][] tickets = new Tickets[10][40];

private void generarTicket(String id, String descripcion) {
Random generator = new Random();
int tipoEntrada = 1 + generator.nextInt(MAX_FREE);
Ticket ticket;

for (byte fila = 0; fila < tickets.length; fila++) {
for (byte columna = 0; columna < tickets[fila].length; columna++) {

if (tipoEntrada % 7 == 0) {
this.ticketPrice = 0;
}
else {
this.ticketPrice = PRICE;
}

Ticket ticket = new Ticket(id, descripcion, this.ticketPrice, false);
tickets[fila][columna] = ticket;
}
}
}


En donde creo una matriz de Tickets, para guardar allí los tickets. No sé si querrás esto, de todos modos te lo dejo.


Saludos.

robertofd1995

perdona me falto publicar la clase ticket , es esta
public class Ticket
{
    //Attributes
    String id,description;
    double price;
    boolean sold;
   

    /**
     * Constructor for objects of class Ticket
     */
    public Ticket(String id,String description,double price,boolean sold)
    {
       setId(id);
       setDescription(description);
       setPrice(price);
       setSold(sold);
    }

    /**
     * An example of a method - replace this comment with your own
     *
     * @param  y   a sample parameter for a method
     * @return     the sum of x and y
     */
    public void setId(String id)
    {
        this.id=id;
       
    }
   
    public void setDescription(String description)
    {
        this.description=description;
       
    }
   
    public void setPrice(double price)
    {
        this.price=price;
       
    }
   
    public void setSold(boolean sold)
    {
        this.sold=sold;
       
    }
   
    public String getId(){return id;}
   
    public String getDescription(){return description;}
   
    public double getPrice(){return price;}
   
    public boolean isSold(){return sold;}
   
    public String toString()
    {
     return ("Id "+ id + " ,description "+ description + " ,price "+price + " ,is sold? " + sold );
    }
}


a ver y una cosa mas , yo todavia estoy aprendiendo (estoy en primero de carrera)

porque al array lo invocas asi :
Tickets[][] tickets = new Tickets[10][40];
y otra cosa , en el bucle for , que es byte , porque aparece en azul ? todavia no he llegado a eso , y de donde sacaste lo de "tipoEntrada"

un saludo y gracias por responder

robertofd1995

Cita de: M1t$u en 24 Noviembre 2013, 21:33 PM


En donde creo una matriz de Tickets, para guardar allí los tickets. No sé si querrás esto, de todos modos te lo dejo.


Saludos.

y donde tu creas la matriz de tickets , yo tengo que guardar , las caracteristicas de cada ticket

Mitsu

Ticket puede ser una pojo. Una pojo es una clase que va a interactuar con el exterior por medio de setters y getters solamente. Tú la has creado como pojo.

La matriz de tickets la he colocado en la clase Film.

Ahora bien, la estructura de la matriz son: [filas] [columnas]. Así que al hacer esto:

Código (=java) [Seleccionar]

Tickets[][] tickets = new Tickets[10][40]; // 10 filas 40 columnas


TipoEntrada determina cuál es el tipo de entrada, si es gratuita o precio regular, por eso hago (tipoEntrada % 7 == 0). Si es múltiplo de 7 la entrada será gratuita, de lo contrario, tendrá un precio regular.

Sobre por qué uso byte en vez de int, pues lo que pasa es que soy un maníaco con el manejo de la memoria xD. Seguramente ya sabes que int ocupa 4 bytes mientras que byte 1 solo. En un int puedes almacenar una gran cantidad de números, es por eso, que utilizo byte, por que el valor máximo que va a almacenar es el máximo de entradas gratis (10).


Saludos.

robertofd1995

al ejecutar tu codigo me dice que se requiere un array , pero se encontro ticket , me da error en la ultima linea de codigo 
         
tickets [fila][columna] = ticket;

a que se debe?

Mitsu

Estás haciendo algo mal, no tiene por qué decir eso.

Esto corre perfectamente:

Código (=java) [Seleccionar]

package javase.matrices.cine.film;

import java.util.Random;
import javase.matrices.cine.ticket.Ticket;


public class Fiml {
   
    private float ticketPrice = 0f;
    private static final int MAX_FREE = 10;
    private static final float PRICE = 7.50f;
    private String id, descripcion;
    Ticket[][] tickets = new Ticket[10][40];

    public void generarTicket(String id, String descripcion) {
        Random generator = new Random();
        int tipoEntrada = 1 + generator.nextInt(400);

        for (byte fila = 0; fila < tickets.length; fila++) {
            for (byte columna = 0; columna < tickets[fila].length; columna++) {

                if (tipoEntrada % 7 == 0) {
                    this.ticketPrice = 0;
                }
                else {
                    this.ticketPrice = PRICE;
                }

                Ticket ticket = new Ticket(id, descripcion, this.ticketPrice, false);
                tickets[fila][columna] = ticket;
            }
        }
    }
   
    public void printTickets() {
        for(byte fila = 0; fila < tickets.length; fila ++) {
            for (byte columna = 0; columna<tickets[fila].length; columna ++) {
                System.out.println(tickets[fila][columna].toString());
            }
        }
    }
   
    public static void main(String... args) {
        Fiml film = new Fiml();
        film.generarTicket("1252", "Campo de entrenamiento.");
        film.printTickets();
    }

}