[Resolvido] Passagem de um array entre duas classe (encapsulamento)

7 respostas
denisagui
boa noite a todos... estou realizando um exercicio da universidade e encontrei um problema, gostaria de saber qual é a melhor forma de passar os valores que recebo na main para armazenar em uma classe onde ficam os atributos.
public class Artigo {
	
	final private int AUTORES = 3;
	final private int ARTIGO = 4;
	
	private String universidade;
	private String titulo;
	
	private String autores[] = new String[AUTORES];
	private String email[] = new String[AUTORES];
	
	private String item[] = new String[ARTIGO];
	private String texto[] = new String[ARTIGO];
	
	public void setUniversidade(String universidade){
		this.universidade = universidade;
	}
	public void setTitulo(String titulo){
		this.titulo = titulo;
	}
	
	public void setAutores(String autores){
		this.autores[] = autores;
		
	}

	public void setItem(String item){
		this.item[] = item;	
	}

	public void setTexto(String texto){
		this.texto[] = texto;
	}

	public void setEmail(String email){
		this.email[] = email;
	}
	
	public String getUniversidade(){
		return universidade;
	}
	
	public String getTitulo(){
		return titulo;
	}
	
	public String[] getAutores(){
		return autores;
	}
	
	public String[] getItem(){
		return item;
	}
	
	public String[] getTexto(){
		return texto;
	}
	
	public String[] getEmail(){
		return email;
	}
			
}
import java.util.InputMismatchException;

public class Principal {
	
	public static void main(String[] args) {
		
		final int CADASTRO = 20;
		Artigo artigo[] = new Artigo[CADASTRO];
		int cont = 0;
		int quant = 0;
		boolean val = true;
				
		for(cont = 0; cont < CADASTRO; cont++){
			
			System.out.println("...:SISTEMA DE ARTIGOS:...");
			
			artigo[cont] = new Artigo();
			
			System.out.println("Nome da Universidade: ");
			artigo[cont].setUniversidade(Servicos.recebeString());
			
			System.out.println("Titulo do Artigo: ");
			artigo[cont].setTitulo(Servicos.recebeString());
			
			do{
				val = true;
				try{
					System.out.println("Quantidade de Autores: 01 a 04 ");
					quant = Servicos.recebeInt();
					
					if(!Validacao.validaOpcao(quant, 1, 4)){
						System.out.println("Valor digitado invalido, Digite novamente.");
						val = false;
					}
					
					}catch(InputMismatchException exce){
						System.out.println("Valor digitado invalido, digite novamente.");
						val = false;
					}
						
			}while(!val);
				
			       for(int cont1 = 0; cont1 < quant; cont1++){
				System.out.println("Digite o NOME do "+cont1+ "º Autor: ");
				artigo[cont1].setAutores(Servicos.recebeString());
				System.out.println("Digite o E-MAIL do"+cont1+ "º Autor:");
				artigo[cont1].setEmail(Servicos.recebeString());
			}
			
			
		}
	}
import java.util.Scanner;

public class Servicos {
	
	public static String recebeString(){
		Scanner input = new Scanner(System.in);
		
		return(input.nextLine());
	}
	
	public static int recebeInt(){
		Scanner input = new Scanner(System.in);
		
		return(input.nextInt());
	}
		
}
public class Validacao {
	
	public static boolean validaOpcao(int op, int min, int max){
		if((op < min)||(op > max))
			return false;
		return true;
	}

até agora esse é o codigo que eu ja fiz... ainda bem no começo, eu criei vetores na classe Artigo, mas não sei qual é a melhor forma de passar vetores que recebo na main para a classe Artigo, desde já agradeço a todos abraço.

7 Respostas

denisagui

será que isso é viável ?

public void setAutores(String autores){
		int cont = 0;
		this.autores[cont] = autores;
		cont++;
		
		if(cont == AUTORES)
			cont = 0;
	}
nel

Boa tarde!

Bom, és iniciante em Java, certo?!
Recomendo ler sobre Enumaration, pois vi que tem duas variavéis final para controle, não é?
Claro, são apenas duas e pode ser usada assim, mas pense nisso ok?

Sobre vetores, é obrigado a utiliza-lo?
Caso contrário poderia utilizar da api Collection, como é o caso do Objeto List.

Bom, para passar o vetor a classe Artigo, basta que a cada vez que queira criar um artigo instanciar, obviamente, a classe artigo e em seguida instancia os vetores que precisa, preenche-los e usar o set, ou seja, seta-los na sua classe Artigo.

Para posterior acesso, basta percorrer a lista que contém seus artigos, simples assim.
Espero ter ajudado.

Abraços.

nel
denisagui:
será que isso é viável ?
public void setAutores(String autores){
		int cont = 0;
		this.autores[cont] = autores;
		cont++;
		
		if(cont == AUTORES)
			cont = 0;
	}

Não entendi nada do que você quer fazendo isso :)
O que seria? Qual o objetivo?

Edit: ainda esqueci de comentar que toda vez que invocar o método setAutores(String autores) a variavél cont receberá 0 e seu valor nunca será superior á 1.

denisagui

certo vou procurar sobre a api, muito obrigado
por acaso tem o modelo de como usa-la ?

nel

denisagui:
certo vou procurar sobre a api, muito obrigado
por acaso tem o modelo de como usa-la ?

Claro, segue exemplo:

Aqui: final int CADASTRO = 20; Artigo artigo[] = new Artigo[CADASTRO];

Você diz que o seu array tem tamanho máximo de 20, ou seja, poderás incluir no máximoo 20 objetos do tipo Artigo.
Normalmente, usa-se a interface List e o ArrayList para implementa-la, sendo assim, seu código ficaria assim:

List<Artigo> artigos = new ArrayList<Artigo>();

Você criou uma Lista de Objetos do tipo Artigo.
Para adicionar, basta fazer:

artigos.add(artigo)

Quando quiseres recuperar um valor, podes usar o método get(int index) ou se quiseres percorrer toda a lista, podes usar o “for each”, assim:

for (Artigo artigo : artigos) { System.out.println("Títutlo: " + artigo.getTitulo()); }

Para mais informações, podes consultar vários sites pela net que exemplificam essa API.
Espero te-lo ajudado e aconselho a estudar a API Collections, há muita coisa interessante, como Collection, Map, Set, HashSet entre outros.

Abraços.

denisagui

muito esclarecedor, duvida sanada.
muito obrigado pelo empenho nel.

grande abraço!

nel

Que isso, sem problemas!
O bom foi ter ajudado.

Só para esclarecer, como sua dúvida foi sanada, adicione no seu tópico, ao invés de [Duvida] altere para [Resolvido] ok?
Abraços!

Criado 24 de março de 2011
Ultima resposta 25 de mar. de 2011
Respostas 7
Participantes 2