Duvida com Objeto

12 respostas
cleyvison

Pessoal, boa tarde.

tenho que fazer um programa que leia o nome e dados de 3 funcionarios, comecei pelos nomes e gerei o seguinte condigo:

public class Tarefa05 {
	static String nome;
	static int qtdHora;
	static int qtdHoraExtra;
	static int qtdMinuto;
	static double valorHora;
	static double salarioTotal;
	
	public Tarefa05(String getNome){
		Tarefa05.nome = getNome;	
	}
	
	private static String getNome() {
		return nome;
	}

	private static void setNome(String nome) {
		Tarefa05.nome = nome;
	}

	public static void main(String[] args) {
		Tarefa05 funcionario1 = new Tarefa05(getNome());
		Tarefa05 funcionario2 = new Tarefa05(getNome());
		
		funcionario1.setNome("joão");
		System.out.printf("Objeto Funcionario: %s \n", funcionario1.nome);
		funcionario2.setNome("carla");		
		System.out.printf("Objeto Funcionario: %s\n", funcionario2.nome);
		/** 
		 * ate aqui parece estar funcionando bem, mas quando eu mando
		 * imprimir os dois objetos ao mesmo tempo o nome do segundo
		 * fica igual ao do primeiro
		 */
		System.out.printf("Objeto Funcionario1: %s \nObjeto funcionario2 %s", funcionario1.nome, funcionario2.nome);
	}

}

O que esta contecendo é o seguinte:
Quando mando imprimir os 2 Objetos ao mesmo tempo os nomes estão saindo iguais.
Algume poderia me dizer onde est ameu erro?

12 Respostas

E

Não use membros static, a menos que você saiba o que está fazendo. No seu caso em particular, você não está sabendo o que está fazendo.

drsmachado

Substitua os static por private

J

eu não sei se este jeito que vocÊ esta fazendo funciona, mas na minha opiniao é masi facil com concatenação, tente assim:

System.out.println(“Objeto Funcionario1:”+funcionario1.nome+" \nObjeto funcionario2 "+funcionario2.nome);

marcelo.bellissimo

Desculpa, mas se ele soubesse o que está fazendo não estaria perguntando…

Então cleyvison , estude o que faz o modificador “static” que você vai entender na hora o que está acontecendo… acho que nesse caso a única coisa que você precisa é usar o “private”, estude o que ele faz também…

cleyvison

pessoal obrigado pelas respostas
fiz assim

package Tarefa05;


public class Tarefa05 {
	private String nome;
		
	public Tarefa05(String nome){
		this.nome = nome;	
	}
	
                public static void main(String[] args){
		String nome = null;
		Tarefa05 funcionario1 = new Tarefa05(nome);
		Tarefa05 funcionario2 = new Tarefa05(nome);
		
		funcionario1.nome="joão";
		System.out.printf("Objeto Funcionario: %s \n", funcionario1.nome);
		funcionario2.nome="carla";		
		System.out.printf("Objeto Funcionario: %s\n", funcionario2.nome);
		//funcionou
		System.out.printf("Objeto Funcionario1: %s \nObjeto funcionario2 %s", funcionario1.nome, funcionario2.nome);
	}

}

Ai funcionou beleza, mas quando qu mandei pegar pelo getNome

public class Tarefa05 {
	private String nome;
		
	public Tarefa05(String getNome){
	       this.nome = getNome;	
	}
	
	private String getNome() {
	       return nome;
	}

	private void setNome(String nome) {
		this.nome = nome;
	}

	public static void main(String[] args){
		Tarefa05 funcionario1 = new Tarefa05(getNome());
		Tarefa05 funcionario2 = new Tarefa05(getNome());
		
		funcionario1.setNome("joão");
		System.out.printf("Objeto Funcionario: %s \n", funcionario1.nome);
		funcionario2.setNome("carla");		
		System.out.printf("Objeto Funcionario: %s\n", funcionario2.nome);
		// Não funcionou na verdade ne compilou
		System.out.printf("Objeto Funcionario1: %s \nObjeto funcionario2 %s", funcionario1.nome, funcionario2.nome);
	}

}

o Eclipse madou que eu modifcasse o metodo para static, mas seguindo a orinetação dos Senhores isso não seria uma bopa pratica…
como corrijo?

douglaskd

mudei algumas coisas para facilitar o entendimento:

public class Tarefa05 {  
        private String nome;  
              
        private Tarefa05(String nome){  
               this.nome = nome;   
        }  
         
       private String getNome() {  
              return this.nome;  
       }  
     
       private void setNome(String nome) {  
           this.nome = nome;  
       }  
     
       public static void main(String[] args){  
           Tarefa05 funcionario1 = new Tarefa05("Aaaaaaa");  
           Tarefa05 funcionario2 = new Tarefa05("Bbbbbbb");  
           
           System.out.printf("Objeto Funcionario: %s \n", funcionario1.nome);  
           System.out.printf("Objeto Funcionario: %s\n", funcionario2.nome); 
           
           funcionario1.setNome("joão");  
           funcionario2.setNome("carla");        
 
           System.out.printf("Objeto Funcionario1: %s \nObjeto funcionario2 %s", funcionario1.getNome(), funcionario2.getNome());  
       }  
     
   }
cleyvison

Agora eu to começanco a entender.

Aqui vc iniciou o Objeto com um valor qualquer e não com o metodo, com eu estava fazendo

Tarefa05 funcionario1 = new Tarefa05("Aaaaaaa");     
        Tarefa05 funcionario2 = new Tarefa05("Bbbbbbb");

so não entendi pq vc pegou o metodo “get” aqui

System.out.printf("Objeto Funcionario1: %s \nObjeto funcionario2 %s", funcionario1.getNome(), funcionario2.getNome());

não deveria ser funcionario1.nome?

douglaskd

tanto faz, como você esta usando a mesma classe…pode colocar somente " . nome "

agora se você criasse outra classe que precisasse acessar o atributo (private nome) dessa classe, teria que fazer através do método getNome, porém o mesmo deveria estar como public getNome

isso se chama Encapsulamento.

agora na inicialização do Objeto, você estava passando (getNome()), mais como ele vai pegar o nome do objeto se ele ainda nem foi criado…

do jeito que fiz ai, na construção do objeto ele ja passa qualquer nome como parâmetro para o construtor.

cleyvison

Obrigado ja to engatinhando…
então isso quer dizer que no contrutor eu não posso passar os metodos “get”?

ao inves disto

public Tarefa05(String nome, int qtdHora, int qtdHoraExtra, int qtdMinutos){
		this.nome = nome;	
		this.qtdHora = qtdHora;
		this.qtdHoraExtra = qtdHoraExtra;
	}

fazer isso?

public Tarefa05(String getNome(), int getQtdHora(), int getQtdHoraExtra()){
		this.nome = nome;	
		this.qtdHora = qtdHora;
		this.qtdHoraExtra = qtdHoraExtra;
	}
cleyvison

Pessoal boa noite

Consegui concluir a minha tarefa mas, ainda ta dando uns erros que não consegui resolver, eis o codigo

import java.util.Scanner;

public class Tarefa05 {
	private String nome;
	private int qtdHoras;
	private int qtdHoraExtras;
	private int qtdMinutos;
	private double valorHoras;
	private double salarioTotal;
	
	
	
	public Tarefa05(String nome, int qtdHoras, int qtdHoraExtras, 
			        int qtdMinutos, double valorHoras, double salarioTotal){
		this.nome = nome;	
		this.qtdHoras = qtdHoras;
		this.qtdHoraExtras = qtdHoraExtras;
		this.qtdMinutos = qtdMinutos;
		this.valorHoras = valorHoras;
		this.salarioTotal= salarioTotal;
	}
	
	private String getNome() {
		return this.nome;
	}

	private void setNome(String nome) {
		this.nome = nome;
	}

	private int getQtdHoras() {
		return qtdHoras;
	}

	private void setQtdHoras(int qtdHoras) {
		this.qtdHoras = qtdHoras;
	}

	private int getQtdMinutos() {
		return qtdMinutos;
	}

	private void setQtdMinutos(int qtdMinutos) {
		this.qtdMinutos = qtdMinutos;
	}

	private void setQtdHoraExtras(int qtdHoraExtras) {
		this.qtdHoraExtras = qtdHoraExtras;
	}

	private int getQtdHoraExtras() {
		return qtdHoraExtras;
	}

	private double getValorHoras() {
		return valorHoras;
	}

	private void setValorHoras(double valorHoras) {
		this.valorHoras = valorHoras;
	}
	
	private double getSalarioTotal() {
		return salarioTotal;
	}

	private void setSalarioTotal(double salarioTotal) {
		this.salarioTotal = salarioTotal;
	}

	public static void main(String[] args){
		
		Scanner ler = new Scanner(System.in);
				
		String nome;
		int qtdHoras;
		int qtdHoraExtras;
		int qtdMinutos;	
		double minutosEmHoras;
		int i=0;
				
		Tarefa05 funcionario1 = new Tarefa05(null,0,0,0,0.0,0.0);
		Tarefa05 funcionario2 = new Tarefa05(null,0,0,0,0.0,0.0);
		Tarefa05 funcionario3 = new Tarefa05(null,0,0,0,0.0,0.0);
		
		for (i=0;i<3;i++){
			
			nome = null;
			qtdHoras=0;
			qtdHoraExtras=0;
			qtdMinutos=0;	
			minutosEmHoras=0;
			
			System.out.print("Digite o nome do Funcionario: ");
			nome=ler.nextLine();		
			
			System.out.print("Digite a quantidade de horas trabalhadas (sem minutos): ");
			qtdHoras=ler.nextInt();
			if(qtdHoras>40){
				qtdHoraExtras=qtdHoras-40;	
				qtdHoras=40;			
			}
			
			System.out.print("Digite a quantidade de minutos: ");
			qtdMinutos = ler.nextInt();
			
			while(qtdMinutos>59){
				System.out.println("A quantidade de minutos não pode ser suérior a 60");
				System.out.print("Digite a quantidade de minutos: ");
				qtdMinutos = ler.nextInt();
			}
			minutosEmHoras=((double)qtdMinutos)/60;
			
			System.out.print("Digite o valor da Hora: ");
			
			switch(i){
			case 0: funcionario1.setNome(nome);
					funcionario1.setQtdHoras(qtdHoras);
					funcionario1.setQtdHoraExtras(qtdHoraExtras);
					funcionario1.setQtdMinutos(qtdMinutos);
					funcionario1.setValorHoras(ler.nextDouble());
					funcionario1.setSalarioTotal((funcionario1.qtdHoras+minutosEmHoras)*funcionario1.getValorHoras());break;
			
			case 1: funcionario2.setNome(nome);
					funcionario2.setQtdHoras(qtdHoras);
					funcionario2.setQtdHoraExtras(qtdHoraExtras);
					funcionario2.setQtdMinutos(qtdMinutos);
					funcionario2.setValorHoras(ler.nextDouble());
					funcionario2.setSalarioTotal((funcionario2.qtdHoras+minutosEmHoras)*funcionario2.getValorHoras());break;
			
			case 2: funcionario3.setNome(nome);
					funcionario3.setQtdHoras(qtdHoras);
					funcionario3.setQtdHoraExtras(qtdHoraExtras);
					funcionario3.setQtdMinutos(qtdMinutos);
					funcionario3.setValorHoras(ler.nextDouble());
					funcionario3.setSalarioTotal((funcionario3.qtdHoras+minutosEmHoras)*funcionario3.getValorHoras());break;
			}			
		}
		
		System.out.printf("Objeto Funcionario1: %s qtdHora: %s qtdHoraExtra: %s " +
		          "qtdMinutos: %s valorHora: %s salarioTotal: %s\n" +
		          "Objeto funcionario2: %s qtdHora: %s qtdHoraExtra: %s " +
		          "qtdMinutos: %s valorHora: %s salarioTotal: %s\n"+ 
		          "Objeto funcionario3: %s qtdHora: %s qtdHoraExtra: %s " +
		          "qtdMinutos: %s valorHora: %s salarioTotal: %s", 
		          funcionario1.getNome(), funcionario1.getQtdHoras(), 
		          funcionario1.getQtdHoraExtras(), funcionario1.getQtdMinutos(),
		          funcionario1.getValorHoras(), funcionario1.getSalarioTotal(),
		          funcionario2.getNome(), funcionario2.getQtdHoras(), 
		          funcionario2.getQtdHoraExtras(), funcionario1.getQtdMinutos(),
		          funcionario2.getValorHoras(), funcionario2.getSalarioTotal(),
		          funcionario3.getNome(), funcionario3.getQtdHoras(), 
		          funcionario3.getQtdHoraExtras(), funcionario3.getQtdMinutos(),
		          funcionario3.getValorHoras(), funcionario3.getSalarioTotal());
	}
}

Ta acontcendo o seguinte:

Quando eu acabo de inserir os dados do funcionario1, ao realizar o loop, o programa ta voltado da segite forma:
ele imprime - Digite o nome do funcionario: Digite a qtd de horas trabalhadas, ou seja ele imprime a interface mas não esta habilitando a ~leitura do nome, neste momento ele ta pedindo a qtd horas.

outra coisa, ele ta calculando todos os salarios, direitinho. exibindo os dados do funcionario1 beleza, mas nos funcionario2 e funcionario3 não esta imprimindo o nome e nem os minutos.
e pra finalizar como limito a impressão de apenas duas casas deciamais?
ja tententei “%.2” mas, não consegui

Alguem pode me ajudar?

cleyvison

[editado]

cleyvison

A duvida ainda continua, agora descobri que se eu trocar “nextLine” por apenas “next” ele funciona, mas eu não consigo ler nomes compostos.

[quote=cleyvison]Pessoal boa noite
(…)

import java.util.Scanner;
(..)			
			System.out.print("Digite o nome do Funcionario: ");
			nome=ler.nextLine();		
			
(..)

quando coloco

System.out.print("Digite o nome do Funcionario: ");
			nome=ler.next();

ele funciona da forma que eu quero so que ele não le por exemplo um nome com 2 Strings “Maria Jose” poe exemplo, alguem sabe com corrigir isso? e eu gostaria de le um nome composto.

Criado 23 de novembro de 2010
Ultima resposta 28 de nov. de 2010
Respostas 12
Participantes 6