Duvida com Objeto

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?

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.

Substitua os static por private

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);

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…

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?

mudei algumas coisas para facilitar o entendimento:

[code] 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());  
   }  

} [/code]

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?

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.

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;
	}

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?

[editado]

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.