Como adcionar uma string em outra classe?

29 respostas
hackum

Oi!

Veja o código:

Classe Cadastro.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vendas;

/**
 *
 * @author gustavo
 */

import java.util.Scanner; //importa a classe Scanner
public class Cadastro {
    
    
    private String nomesFunc; //nome do funcionario
    
    //cria Scanner para obter dados  a partir da janela de comando
    Scanner input = new Scanner(System.in);
 
    public void exibirMensagem()
    {
        //exibe mensagem de boas vindas
        System.out.println("Seja bem vindo(a) ao Departamento de Vendas da GOL Linhas Aereas!");
        System.out.println("Digite os nomes dos funcionarios para cadastro.\n"
                          +"Para receber o salario total deste mes. ");
    }
    //metodo para cadastrar o nome dos funcionarios 
    public void Cadastro()
    {
        int counter = 0;
        
        //entra no while para pedir os nomes do funcionario
        System.out.println("Digite o nome dos funcionarios para o departamento 1:     "
                          +"Apos concluido. Aperta simultaneamente Ctrl + D, para sair.");
        nomesFunc = input.nextLine();
       
        while(input.hasNext())
        {
            //pede a solicitacao dos nomes
            System.out.println("Digite o nome dos funcionarios para o departament 1:"
                             + "Apos concluido. Aperta simultaneamente Ctrl +d para sair");
            nomesFunc= input.nextLine();
            
            counter++; //incrementa
        }
        
        
    }
    
    
}

Classe VendasTest.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vendas;

/**
 *
 * @author gustavo
 */

import java.util.ArrayList; //importa a classe ArrayList
public class VendasTest {
    
    private String nomeEmpresa; //nome da empresa
    private ArrayList<String> departamentoUm = new ArrayList<String>(); //inicializa o array
    private ArrayList<String> departamentoDois = new ArrayList<String>(); //inicializa o array
    
    
    
    
    public VendasTest()
    {
        
      
        
    }
    
    public void addFuncionario(String dUm)
    {
        
        
        
        
    }  
    
}

Como podemos ver, eu quero adcionar o nome cadastrado pelo usuário ao método addFuncionario, lembrando que quero adcionar ao Array, para o departamento1.
Por favor, alguem pode me ajudar ?

29 Respostas

romarcio

Depois que ler do teclado, faça uma chamada ao método addFuncionario através de uma instancia da classe VendasTest.
No método addFuncionario, faça assim:

public void addFuncionario(String dUm) { departamentoUm.add(dUm); }

C

as arrays não deveriam ser static dai, romarcio?
sem criar um objeto, como ele vai chamar o metodo?

romarcio

caematos:
as arrays não deveriam ser static dai, romarcio?
sem criar um objeto, como ele vai chamar o metodo?

Dai depende do que ele quer fazer com esse array.

hackum

Olá a todos!
Obrigado por me responder!
Veja:

Cadastro.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vendas;

/**
 *
 * @author gustavo
 */

import java.util.Scanner; //importa a classe Scanner
public class Cadastro {
    
    VendasTest vendas = new VendasTest();
    
    private String nomesFunc; //nome do funcionario
    
    //cria Scanner para obter dados  a partir da janela de comando
    Scanner input = new Scanner(System.in);
    

    public void exibirMensagem()
    {
        //exibe mensagem de boas vindas
        System.out.println("Seja bem vindo(a) ao Departamento de Vendas da GOL Linhas Aereas!");
        System.out.println("Digite os nomes dos funcionarios para cadastro.\n"
                          +"Para receber o salario total deste mes.\n ");
    }
    //metodo para cadastrar o nome dos funcionarios 
    public void Cadastro()
    {
        int counter = 0;
        
        //entra no while para pedir os nomes do funcionario
        System.out.println("Digite o nome dos funcionarios para o departamento 1:     "
                          +"Apos concluido. Aperta simultaneamente Ctrl + D, para sair.\n");
        nomesFunc = input.nextLine();
        vendas.addFuncionario(nomesFunc);
       
        while(input.hasNext())
        {
            //pede a solicitacao dos nomes
            System.out.println("Digite o nome dos funcionarios para o departament 1:\n"
                             + "Apos concluido. Aperta simultaneamente Ctrl +d para sair\n");
            nomesFunc= input.nextLine();
            vendas.addFuncionario(nomesFunc);        
            counter++; //incrementa
        }
  
    }

}

VendasTest.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vendas;

/**
 *
 * @author gustavo
 */

import java.util.ArrayList; //importa a classe ArrayList
public class VendasTest {
    
    private String nomeEmpresa; //nome da empresa
    private ArrayList<String> departamentoUm = new ArrayList<String>(); //inicializa o array
    private ArrayList<String> departamentoDois = new ArrayList<String>(); //inicializa o array
    private String i;

    public VendasTest()
    {
        
      
        
    }
    
    public void addFuncionario(String dUm)
    {       
        departamentoUm.add(dUm);
    }  
    
         //lista os nomes dos funcionarios
    public void  listarNomes()
    {
        
        for(String i:departamentoUm)
            
         System.out.printf("%s",i);

        
    }
 
}

Método Main (Principal)
Vendas.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


package vendas;

/**
 *
 * @author gustavo
 */

public class Vendas {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        //cria VendasTest para chamar seus respectivos metodos
        VendasTest myVendas = new VendasTest();
        Cadastro myCadastro = new Cadastro();
        
        myCadastro.exibirMensagem();
        myCadastro.Cadastro();
        myVendas.listarNomes();
        
    }
}

Quero listar os nomes gravados no array. Porém, não está obtendo a lista. O que está havendo ?
Obrigado!

C

o myVendas.listarNomes(); tem que ser chamado na classe Controle, mas na verdade seu código está muito estranho, tente um do…while ao invés de while

hackum

Olá! caematos
Poderia me informar como procedo ?
Estranho ?
Como assim ?
Chamar no método da classe Controle ? Você diz a classe onde está o método main ?
Observe, já está.

romarcio

Na boa, reveja sua implementação.
Ta muito desorganizado seu código.

Por exemplo, crie a leitura dos nomes no método main.
Reveja o seu while também.

hackum

romarcio, eu já sei a questão do while.
Mas não estou entendendo essa de código desorganizado. Eu ainda vou ver arrumar algumas coisas, sim, claro.
Primeiro, quero saber como listar os nomes digitado no loop (while) ?

romarcio

Ai que tá.
Como o código não está sendo feito com uma lógica apropriada, você vai ter problemas futuros.

Mas se quer continuar assim, marca seus arrays como static
private static ArrayList<String> departamentoUm = new ArrayList<String>();
e no seu
while(!nomesFunc.equals("0"))
dai quando digitar zero, ele sai do while. e pode mudar o método que lista para
public void  listarNomes()
    {
        
        for(String i:departamentoUm)
            
         System.out.println(i);

        
    }
hackum

romarcio,
Poderia me informar o porque que a lógica está incorreta ?

C

tira a chamada no main pra listaNomes();
e aplica esse codigo

public void fazCadastro() {

        VendasTest vendas = new VendasTest();
        String nomesFunc; //nome do funcionario  
        //cria Scanner para obter dados  a partir da janela de comando  
        Scanner input = new Scanner(System.in);

        System.out.println(
                "Digite o nome dos funcionarios para o departamento 1:     "
                + "Apos concluido. Aperta simultaneamente Ctrl + D, para sair.\n");


        nomesFunc = input.nextLine();
        vendas.addFuncionario(nomesFunc);
        
        while (!nomesFunc.equals("0")) {
            nomesFunc = input.nextLine();
            vendas.addFuncionario(nomesFunc);
        }
        vendas.listarNomes();
    }
}
hackum

Oi!
Ainda não listou os nomes.

C

não sei pq não funcionava com o hasNext();
alguém sabe ?

hackum, estude mais sobre OO

C

no vendastest mude aqui

public void listarNomes() {

        for (String i : departamentoUm) {

            System.out.println(i);
        }

    }
hackum

caematos,
Você está mandando eu estudar OO ?
Eu estou justamente estudando isso. Mas como sempre, aparece dúvidas sobre o que estou estudando.
E estou iniciando, e as dúvidas estou postando aqui. Mas, vocês mandam estudar, sendo que já estamos estudando o determinado assunto.

romarcio

Veja se assim não fica mais fácil entender o código?

package vendas;

/**
 *
 * @author gustavo
 */

import java.util.ArrayList; 

public class VendasTest {
    
    private String nomeEmpresa; //nome da empresa
    private ArrayList<Cadastro> departamentoUm = new ArrayList<Cadastro>();
    private ArrayList<Cadastro> departamentoDois = new ArrayList<Cadastro>(); 

    public VendasTest() {    
    }
	

    public void addFuncionario(Cadastro c) {
        departamentoUm.add(c);
    }  
    
         //lista os nomes dos funcionarios
    public void  listarNomes() {
        for(Cadastro i : departamentoUm)
			System.out.println("Nome: " + i.getNomesFunc());
    }
 
}
package vendas;

/**
 *
 * @author gustavo
 */
import java.util.ArrayList;
import java.util.Scanner;

public class Vendas {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
		//cria Scanner para obter dados  a partir da janela de comando
		Scanner input = new Scanner(System.in);	
        String opcao = "";
		
		Cadastro myCadastro;
		
        VendasTest myVendas = new VendasTest();
		
        //entra no while para pedir os nomes do funcionario
        while(!opcao.equals("0")) {
			System.out.print("Tecle -> 1.Cadastrar / 2.Listar / 0.Sair: ");
			opcao = input.nextLine();
			if(opcao.equals("1")) { 
				System.out.print("Digite um nome: ");
				myCadastro = new Cadastro();
				myCadastro.setNomesFunc(input.nextLine());
				myVendas.addFuncionario(myCadastro);
			} else if (opcao.equals("2")) {
				myVendas.listarNomes();
			}
        } 
    }
}
package vendas;

public class Cadastro {
   
    private String nomesFunc; //nome do funcionario
	
	public void setNomesFunc(String nomesFunc) {
		this.nomesFunc = nomesFunc;
	}
	
	public String getNomesFunc() {
		return this.nomesFunc;
	}
    
}
hackum

Sem comentários, romarcio.
Por isso, vou postando dúvidas, para que assim eu possa chegar ao seu nível seu e aos demais aqui do fórum.
Agradeço por ter me ajudado.
Mas, eu ainda tenho umas dúvidas.
Sempre tenho medo dela, pois pelo o que estou estudando, ela não me tirou essa dúvida.
Nota: Ainda vou ter uma lógica igual a sua.
Veja:

Cadastro myCadastro;
this
ArrayList<Cadastro>

Para que eu possa entender o código por completo. Poderia me explicar esses três códigos postados acima ?
Muito obrigado!

romarcio

Posso sim.

Cadastro myCadastro; -> Aqui foi criada uma variável do tipo Cadastro.
Depois dentro do if quando eu fiz: myCadastro = new Cadastro(); eu criei um objeto para essa variável. Seria como seu você incializase ela, a cada vez que faço new Cadastro();;

this -> Quando eu tenho esse caso:

public void setNomesFunc(String nomesFunc) { this.nomesFunc = nomesFunc; } veja que a variavel do parametro possui o mesmo nome da variavel da classe. Usando this.nomesFunc eu indico que estou atribuindo o valor da variável do parâmetro a variável da classe.

ArrayList<Cadastro> -> Aqui estou criando um array de Cadastro, assim posso atribuir a ele um objeto do tipo Cadastro. Seria parecido com isto ArrayList<String> só que aqui eu só posso atribuir ao array uma String.

hackum

Oi!
Obrigado pela resposta, veja:

Cadastro myCadastro;

Isso, voce acessaria os dados da classe Cadastro ?

Seria a mesma coisa que fizeste:

Cadastro myCadatro = new Cadatro();

?

romarcio

Isso mesmo.

Fazer isso:

Cadastro cadastro; cadastro = new Cadastro();

É o mesmo que isso:

Cadastro cadastro = new Cadastro();
hackum

Muito bom, romarcio!
Fico imensamente grato por tirar minhas dúvidas, vou fazer o programa novamente em base no seu, para que assim eu possa aprender. De coração muito obrigado!
Não aproveitando de sua boa vontade, poderia me tirar essa dúvida ?
Veja:

System.out.print("Digite um nome: "); myCadastro = new Cadastro(); myCadastro.setNomesFunc(input.nextLine()); myVendas.addFuncionario(myCadastro);

Eu poderia fazer dessa forma ?

System.out.print("Digite um nome: "); String nameAdd = input.nextLine(); myCadastro = new Cadastro(); // myCadastro.setNomesFunc(input.nextLine()); myVendas.addFuncionario(nameAdd);

Aqui:

public void addFuncionario(Cadastro c) {  
        departamentoUm.add(c);  
    }

De onde você tirou esse Cadastro ? Já que você não instanciou nada dentro da classe ?

romarcio

Pode fazer desde que mude o tipo de parametro do método addFuncionario() para String e não Cadastro. E também deveria mudar o tipo do ArrayList para String.

Mas é ai que entra a O.O, se você vai fazer um array de Nomes cadastrados, use a classe Cadastro para isso.
Se não, para que um classe cadastro então?

Não entendi a sua última dúvida, explique melhor.

C

hackum:
caematos,
Você está mandando eu estudar OO ?
Eu estou justamente estudando isso. Mas como sempre, aparece dúvidas sobre o que estou estudando.
E estou iniciando, e as dúvidas estou postando aqui. Mas, vocês mandam estudar, sendo que já estamos estudando o determinado assunto.

relaxa, não estou mandando nada não hahaha…
sou iniciante também cara, mas seria bom tu dar uma revisada em OO para entender algumas coisas básicas

por isso mesmo, esse método vai receber de outra classe uma instância já feita de Cadastro, que será referenciado pela variável “c

hackum

Olá a todos!
Oi, romarcio, mais uma vez obrigado por responder!
Bom, eu quero saber, de onde você tirou esse Cadastro desse código:

public void addFuncionario(Cadastro c) {    
    departamentoUm.add(c);    
}

Olá caematos!
Somos eternos aprendizes!
Obrigado por responder!
Mas, porque nesse caso ele não chamou a classe com:

Cadastro myCadastro = new Cadastro

Ele tinha que fazer isso para ter o Cadastro, não ?
Visto, que você criou uma variavel: c para pegar os dados, mas e esse Cadastro ?
Por favor, se possível, me explique mais uma vez abragendos todos os aspectos.

Abraços a todos!

C

repare que quem chama o método é na outra classe

myCadastro = new Cadastro(); myCadastro.setNomesFunc(input.nextLine()); myVendas.addFuncionario(myCadastro);

ela já criou uma instância de Cadastro() (myVendas) , e está passando para o método

public void addFuncionario(Cadastro c) {      
    departamentoUm.add(c);      
}

então o método acima vai receber uma instância do tipo Cadastro (myVendas da outra classe) e vai referenciar pela variável c. Não precisa dar o new porque já está pronto, sacou?
c e myVendas apontam pra mesma instância no momento em que foi passada pro método.

Rodrigo_Sasaki

não quero ser arrogante nem nada.

mas vendo o seu código inicial, sugiro que dê uma lida sobre método construtor.

Com certeza vai te ajudar no futuro

JoaoBluSCBR

Desculpe-me, mas acho que todos vocês deveriam tentar aprender um pouco de orientação a objetos. Vocês estão programando em uma linguagem Orientada a Objetos e me parece não conhecerem nada disso.
Um objeto (a instanciação de uma classe) é a base de tudo. Enquanto esse objeto existir ele está disponível e pode ser usado.
Vocês criaram myVendas e myCadastro dentro do método main da classe Vendas. Tudo bem, eles vão existir enquanto esse método rodar, mas um objeto precisa conhecer o outro se, como no caso, um objeto faz o cadastro e o outro quer mostrar a lista.
Onde estão as listas? Na classe VendasTest e onde ela é instanciada? Em myVendas na classe Vendas. E como myCadastro sabe onde está essa lista para ser usada? Passando ela por parâmetro:

VendasTest myVendas = new VendasTest();   
Cadastro myCadastro = new Cadastro(myVendas);

É claro que a classe Cadastro tem que saber o que fazer com essa informação, então criamos nela um atributo para receber e guardar essa instancia myVendas:

public class Cadastro {         
       
    private String nomesFunc; //nome do funcionario   
    //cria Scanner para obter dados  a partir da janela de comando   
    Scanner input = new Scanner(System.in);
    private VendasTest myVendas;

e criamos um constructor para receber e guarder o parâmetro neste atributo:

public Cadastro(VendasTest myVendas){
	this.myVendas = myVendas;
}

Pronto, agora, dentro de Cadastro você pode usar os métodos de VendasTest e as listas estarão a disposição e sendo usadas e carregadas.
Então depois usar o Scanner cada vez é só adicionar uma string a lista:

nomesFunc = input.nextLine(); 
 myVendas.addFuncionario(nomesFunc);
while(input.hasNext())   
        {   
            //pede a solicitacao dos nomes   
            System.out.println("Digite o nome dos funcionarios para o departament 1:"   
                             + "Apos concluido. Aperta simultaneamente Ctrl +d para sair");   
            nomesFunc= input.nextLine();
            myVendas.addFuncionario(nomesFunc);
               
            counter++; //incrementa   
        }

E o resto em Vendas nem precisa ser mudado, por que agora todos estão usando a mesma lista.

Desculpem tanta explicação, mania de professor, mas você iriam lutar muito ainda se não entenderem que a lista só existe dentro do objeto instanciado na classe VendasTest. Cadastro nem sabe que ela existe. Isso é encapsulamento. Isso é orientação a objetos. Separar os métodos de cada objeto dentro da classe e fazer com que um objeto veja o outro de alguma maneira.

Se, por exemplo, você instanciasse um VendasTest myVendas dentro de Cadastro, não seria o mesmo objeto instanciado em Vendas. Haveriam 2 objetos VendasTest e seriam duas listas. Por isso é preciso mostrar um objeto ao outro.
Mas sabendo orientação daria para fazer este pequeno projeto de várias maneiras diferentes.

romarcio

JoaoBluSCBR você já deu aulas sobre coesão e acoplamento?

C

desculpem, não é myVendas e sim myCadastro.

Criado 22 de junho de 2011
Ultima resposta 24 de jun. de 2011
Respostas 29
Participantes 5