Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

darkangel_13

Como instanciar multiplos objetos

Recommended Posts

darkangel_13

Tou a fazer um exercicio em que básicamente tenho que ler um ficheiro cuja primeira linha tem o numero de objectos a ser criados, a minha duvida é como é que eu crio vários objectos ? visto que essa linha tanto pode dizer 5 como 6 como 2 como 1 ..

Cumps

Share this post


Link to post
Share on other sites
pedrotuga

Parece um exercício típico em que lês um inteiro do standard input w fazes um ciclo for usnado esse inteiro como condição de paragem.

Os obejctos podes por exemplo ir adicionando ao final de um ArrayList.

Share this post


Link to post
Share on other sites
darkangel_13

Basicamente tem que se adicionar contentores a um barco..

Cuja a leitura da primeira linha do ficheiro é o numero de contentores e as restantes referem-se respectivamente numa linha à capacidade livre e ao tipo de contentor ex:

3

3.4 2

4.5 1

A minha duvida é como é que eu vou criar os contentores ( tenho a classe já criada) de forma ciclica pois tanto podem ser 3 contentores como 10

Share this post


Link to post
Share on other sites
darkangel_13

Classe Barco

// Numero maximo de contentores
public static final int MAX_CONTENTORES = 9;
// Numero maximo de mercadorias
public static final int MAX_MERCADORIAS = 30;
  /**
* Construtor
*
* @param in - de onde se leem os dados sobre os contentores
* numero de contentores e características de cada contentor.
* @requires in != null && ficheiro in deve ter o seguinte formato
* 1a linha - numero de contentores,
* 2a e restantes linhas - dados de um contentor:
* capacidade livre do contentor (em t) e tipo do contentor.
* @ensures  quantosContentores() <= MAX_CONTENTORES
*		   && quantasMercadorias() == 0 && peso() eh zero
*/
public Barco(BufferedReader in) throws IOException

  /**
* Quantos contentores ha neste barco.
*/
public int quantosContentores()
  /**
* Quantas mercadorias ha neste barco.
*/
public int quantasMercadorias()
  /**
* Peso total do carregamento.
*/
	public double peso()
  /**
* Carrega o barco.
* @param in - de onde se leem os dados sobre as mercadorias
*						sequencia de mercadorias e suas caracteristicas.
* @requires in != null && ficheiro in deve ter o seguinte formato
*						cada linha define uma mercadoria: peso (em t) e qualidade.
* @ensures  o barco esta carregado de acordo com o algoritmo.
*/
public void carrega(BufferedReader in) throws IOException
  /**
* Guardar os resultados do carregamento num ficheiro de texto.
*
* @param out - onde se guardam os resultados
* @requires out != null
* @ensures out esta preenchido da seguinte forma:
*  - Para cada contentor, uma linha contendo:
*	   numero do contentor, sequencia de mercadorias a carregar no contentor,
*	   capacidade livre do contentor e informacao sobre se esta cheio ou não.
*  - Uma linha contendo o peso total das mercadorias carregadas.
*  - Uma linha (ultima) contendo o numero total de mercadorias carregadas.
*/
public void guardaCarregamento(BufferedWriter out) throws IOException

Classe Contentor

// Peso maximo a carregar no contentor
 public static final double MAX_PESO = 100.0;
 // Matriz de compatibilidades:
 // 1's sao compatibilidades;
 // 0's sao incompatibilidades
 public static int[][] compatibilidade = { { 1, 0, 1 },
										   { 0, 1, 0 },
										   { 1, 0, 1 } };
  /* exemplo: a 1ª linha - {1, 0, 1} - indica que os contentores de tipo 1
* sao compativeis com as mercadorias das qualidades 1 e 3
*/
  /**
* Construtor
*
* @param numero - numero do contentor
* @param capInicial - capacidade livre (em t) do contentor
* @param tipo - tipo do contentor
* @requires numero >=1 && numero <=9 && capInicial >= 0.0 &&
*		 capInicial <= MAX_PESO && tipo >=1 && tipo <= 3
* @ensures numero() == numero && capLivre () == capInicial && tipo() ==
*		  tipo
*/
public Contentor(int numero, double capInicial, int tipo)
  /**
* A capacidade livre do contentor em toneladas.
*/
public double capLivre ()
  /**
* O tipo do contentor.  
*/
public int tipo()
  /**
* Quantas mercadorias ha no contentor.
*/
public int quantasMercadorias()
  /**
* Eh compativel com qualidade?
*
* @param qualidade - qualidade de mercadoria
*/
public boolean ehCompativel(int qualidade)
  /**
* Esta cheio?
*/
public boolean estaCheio()
  /**
* Actualiza contentor com mercadoria
*
* @param mercadoria - numero da mercadoria
* @param qualidade - qualidade da mercadoria
* @param peso - peso da mercadoria
* @requires ehCompativel(qualidade) && capLivre() >= peso
* @ensures capLivre() diminuiu peso unidades.
*/
public void carrega(int mercadoria, int qualidade, double peso)

  /**
* Representacao textual do contentor
*
* @return uma String contendo o numero do contentor, a sequencia de
*		 mercadorias a carregar no contentor, a capacidade livre,
*		 e se o contentor esta cheio ou nao.
*		 Exemplo:
*		 contentor 2: 1 2 4 6 7 8; cap livre = 3.0 / nao cheio
*/
public String toString()

Classe Run

import java.io.*;
/**
* Classe que permite testar as classes Barco.java e Contentor.java
* @author respicio
* @Date Marco 2011
*/

public class RunBarco {
 public static void main(String[] args) throws IOException {
BufferedReader contentores;
BufferedReader in;
BufferedWriter out;
Barco barco;
/* dados sobre os contentores do barco */
contentores = new BufferedReader( new FileReader("contentores.txt") );
/* dados sobre as mercadorias a carregar */
in		  = new BufferedReader( new FileReader("input.txt") );
out		 = new BufferedWriter( new FileWriter("output.txt") );
barco = new Barco(contentores); /* cria barco com os dados dos contentores*/
barco.carrega(in); /* le dados das mercadorias e determina carregamento */
barco.guardaCarregamento(out);
contentores.close();
in.close();
out.close();

 }
}

Obrigado pelas respostas !

Edited by darkangel_13

Share this post


Link to post
Share on other sites
HappyHippyHippo

1º - o número de linhas de código das classes apresentadas : zero

2º - o número de linhas de código relevante da leitura do ficheiro : zero

3º - nem vou comentar o construtor da classe Barco : o reader ???

4º -

o que tens de fazer é ler do ficheiro quantos objectos tens de instância e com um ciclo os instânciar


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
darkangel_13

Essas classes não fui eu que fiz, foi o que me foi dado ..

public Barco(BufferedReader in) throws IOException
//Aqui criei um objecto scanner que recebe o in
//Li o ficheiro para uma matriz
//Agora como faço para criar o numero de objectos necessarios ? ou seja o numero de contentores

Mas eu preciso de dar nomes aos contentores certo? para poder instâncias, é possível fazer algo do genero

Contentor $i =new Contentor(..);

em que i assuma varios valores ?Assim poderia fazer com um ciclo

Edited by darkangel_13

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.