[RESOLVIDO] - Conversão para String

11 respostas
M

Bom dia, meu problema é o seguinte…

Tenho que fazer a classe Departamento com os seguintes atributos privados:

  • código do departamento;
  • nome do departamento;
  • quantidade de funcionários do departamento;

Depois tenho que fazer um construtor que receba os seguintes métodos:

  • métodos de configuração (set) para os atributos código e nome. O código deve ser
    verificado. Se inválido, atribuir 1;
  • métodos de acesso (get) para todos os atributos;
  • saiFuncionarioDoDepto ? chamado quando um funcionário do departamento é demitido
    ou transferido para outro departamento;
  • entraFuncionarioNoDepto ? chamado sempre que um novo funcionário é alocado no
    departamento;
  • dadosDoDepartamento ? este método retorna, em forma de String, os dados do
    departamento, adequadamente separados e identificados.

Pois bem, eu fiz o seguinte…

public class Departamento {
        //------ atributos------
        private int codigo;
        private String nome_departamento;
        private int qtd_func;

//-------- construtor----------------------------
        
public Departamento( int cod, String nom) {
          codigo = cod;
          nome_departamento = nom;
          qtd_func = 0;
              
            }  

public void saiFuncionarioDoDepto(int func){
          if (getQtdFuncionario() > 0){
          int funcionarios = getQtdFuncionario()- func;
          } else {
              getQtdFuncionario();
            
           }
          
       }  

public void entraFuncionarioNoDepto(){
                getNome();
                qtd_func = qtd_func + 1;
            }

public String dadosDoDepartamento(){
                System.out.println(getCodigo());
                System.out.println(getNome());
                System.out.println(getQtdFuncionario());
                return dadosDoDepartamento();
                
            }

public void setCodigo(int codigo ) {
           if (codigo >= 1 && codigo <= 5){
           this.codigo = codigo;
           }else {
                this.codigo = 1;
                }
            }

public void setNome(String n ) {
                if (n.length() >0)
                nome_departamento = n;
        
            }//---fim do método setNome ------------------
        
            public int getCodigo() {
                return codigo;
            }//---fim do método getNumero -----------------
        
            public String getNome() {
                return nome_departamento;
            }//---fim do método getNome -------------------
            
            public int getQtdFuncionario() {
                return qtd_func;
            }//---fim do método getNome -------------------
  }//

Pois bem, meu problema é que eu não estou conseguindo chamar o método “dadosDoDepartamento” corretamente, ele até exibe os dados, mas dá erro, Creio que deva ser porque o código e a quantidade de funcionários são valores inteiros, e o retorno do dadosDoDepartamento é String, como eu faço então?

11 Respostas

drsmachado

maxcanoas:

Pois bem, meu problema é que eu não estou conseguindo chamar o método “dadosDoDepartamento” corretamente, ele até exibe os dados, mas dá erro, Creio que deva ser porque o código e a quantidade de funcionários são valores inteiros, e o retorno do dadosDoDepartamento é String, como eu faço então?

Não tem nada a ver com o tipo de dados do código e da quantidade. Tem a ver com erro de implementação ou de lógica.
Se eu pergunto o teu nome e você me responde com um número, eu entenderei que isso é um erro (A não ser que você seja da família Zeroberto ou Umberto). Agora, se me responde teu nome, mesmo que ele não seja realmente o verdadeiro, eu entenderei que é o nome correto.
Como assim?
Quando você coloca esta assinatura

public String dadosDoDepartamento(){

Ao compilar a classe, o compilador entender que um objeto do tipo String será retornado, o que poderia simplesmente ser

public String dadosDoDepartamento(){  
    return null;
}

ou

public String dadosDoDepartamento(){  
    return "";
}

ou

public String dadosDoDepartamento(){  
    return "Ainda não implementado";
}

Note que tanto null, quanto aspas vazias ("") quanto “Ainda não implementado” são retornos válidos, pois são (exceto o null) objetos da classe String.
Agora, se você quer retornar algo, comece por esquecer os System.out.println que colocou ali. Em vez disto, concatene uma String definindo a descrição da informação seguida da informação a retornar.
Por exemplo, se os dados do departamento fossem nº de computadores e nome da sala:

public String dadosDoDepartamento(){  
    String dados = "Nº de computadores: " + numComputadores + "\nNome da sala: " + nomeSala;
    return dados;
}

Aí, se você quiser, pode até fazer um

public String dadosDoDepartamento(){  
    String dados = "Nº de computadores: " + numComputadores + "\nNome da sala: " + nomeSala;
    System.out.println(dados);
    return dados;
}

Entendeu?

drsmachado

Outra opção é simplesmente trocar o tipo de retorno de String para void e, também, o return do método.

public void dadosDoDepartamento(){  
    System.out.println(getCodigo());  
    System.out.println(getNome());  
    System.out.println(getQtdFuncionario());  
    //return dadosDoDepartamento();                    
}

Pronto, agora está funcional.

M

Pois bem, vou tentar aqui…valeu!!

charleston10

Até sei o que aconteceu.

Voce programava em VB6 ?

Pois bem, em Java voce nao pode retornar o proprio metodo como no vb..
Como em todas linguagens oriunda do C vc deve retornar algum tipo de valor em seu retorno.

maneira errada
public String dadosDoDepartamento(){   
                System.out.println(getCodigo());   
                System.out.println(getNome());   
                System.out.println(getQtdFuncionario());   
                return dadosDoDepartamento();  //retorna o proprio metodo -> isso e errado
                   
            }
maneira certa
public String dadosDoDepartamento(){   
                System.out.println(this.getCodigo());   
                System.out.println(this.getNome());   
                System.out.println(this.getQtdFuncionario());   
                return String.valueOf(this.getQtdFuncionario());    //converte o valor para o tipo String retornando no proprio metodo               
            }

Obs.: Importante - Nunca esqueça de referenciar sua classe em seus metodos, tanto Getters, Setters ou qualquer outro tipo.
Usando a referencia da propria classe nesse caso como THIS, pois se houver herança de dados e implementação de interface vai da pau
e vc vai quebrar a cabeça pra achar o erro.

É isso ai na vdd..

;]

M

e é isso aí mesmo, funcionou certinho!

Valeu!

drsmachado
charleston10:
Até sei o que aconteceu.

Voce programava em VB6 ?

Pois bem, em Java voce nao pode retornar o proprio metodo como no vb..
Como em todas linguagens oriunda do C vc deve retornar algum tipo de valor em seu retorno.

maneira errada
public String dadosDoDepartamento(){   
                System.out.println(getCodigo());   
                System.out.println(getNome());   
                System.out.println(getQtdFuncionario());   
                return dadosDoDepartamento();  //retorna o proprio metodo -> isso e errado
                   
            }
maneira certa
public String dadosDoDepartamento(){   
                System.out.println(this.getCodigo());   
                System.out.println(this.getNome());   
                System.out.println(this.getQtdFuncionario());   
                return String.valueOf(this.getQtdFuncionario());    //converte o valor para o tipo String retornando no proprio metodo               
            }

Obs.: Importante - Nunca esqueça de referenciar sua classe em seus metodos, tanto Getters, Setters ou qualquer outro tipo.
Usando a referencia da propria classe nesse caso como THIS, pois se houver herança de dados e implementação de interface vai da pau
e vc vai quebrar a cabeça pra achar o erro.

É isso ai na vdd..

;]


E se você quiser usar recursão?

charleston10

Convenhamos, não posso discutir o que será melhor pra um ou pra outro.

Na verdade o que for mais útil e mais fácil, desde que esteja no padrão, pode ser feito…

;]

drsmachado

charleston10:
Convenhamos, não posso discutir o que será melhor pra um ou pra outro.

Na verdade o que for mais útil e mais fácil, desde que esteja no padrão, pode ser feito…

;]


Concordo.
Por isso nós existimos e os analistas também. É preciso analisar caso a caso, até mesmo um sistema de vendas não se aplica a todas as formas de comércio.

charleston10

drsmachado:
charleston10:
Convenhamos, não posso discutir o que será melhor pra um ou pra outro.

Na verdade o que for mais útil e mais fácil, desde que esteja no padrão, pode ser feito…

;]


Concordo.
Por isso nós existimos e os analistas também. É preciso analisar caso a caso, até mesmo um sistema de vendas não se aplica a todas as formas de comércio.

Falo e disse…

M

outro problema...
eu tenho essa classe Departamento..

public class Departamento {
            //------ atributos------
        private int codigo;
        private String nome_departamento;
        private int qtd_func;
        //-------- construtor----------------------------
        
            public Departamento( int cod, String nom) {
                codigo = cod;
                nome_departamento = nom;
                qtd_func = 0;
              
            }  
            
            //--------------métodos----------------------
            
            public void saiFuncionarioDoDepto(){
                if (getQtdFuncionario() > 0){
                qtd_func = getQtdFuncionario()- 1;
                 }
          
            }  
            
            public void entraFuncionarioNoDepto(){
                getNome();
                qtd_func = qtd_func + 1;
            }
            
            public String dadosDoDepartamento(){
                System.out.println("O código do departamento é: " + this.getCodigo());
                System.out.println("");
                System.out.println("O nome do departamento é: " + this.getNome());
                System.out.println("");
                System.out.println("A quantidade de funcionários é: " + this.getQtdFuncionario());
                return String.valueOf(this.getQtdFuncionario());
                
            }
            
            public void setCodigo(int codigo ) {
                if (codigo >= 1 && codigo <= 5){
                this.codigo = codigo;
              }else {
                this.codigo = 1;
                }
            }//--//fim do método setNumero ---------------
        
            public void setNome(String n ) {
                if (n.length() >0)
                nome_departamento = n;
        
            }//---fim do método setNome ------------------
        
            public int getCodigo() {
                return codigo;
            }//---fim do método getNumero -----------------
        
            public String getNome() {
                return nome_departamento;
            }//---fim do método getNome -------------------
            
            public int getQtdFuncionario() {
                return qtd_func;
            }//---fim do método getNome -------------------
  }//

e agora estou tendo que implementar a classe Funcionario, e essa classe terá um método que se chama aloca, este método será chamado sempre que o funcionário for alocado ou realocado. Recebe um parâmetro do tipo Departamento que corresponde ao departamento para o qual o funcionário está sendo transferido ou alocado. Este método deve atualizar os
objetos do tipo Departamento envolvidos na operação.

Eu não estou sabendo como fazer, podem dar uma mão?

drsmachado

Veja bem, não é a mesma dúvida, certo?
Então abra um novo tópico.

Criado 22 de abril de 2013
Ultima resposta 22 de abr. de 2013
Respostas 11
Participantes 3