[Resolvido] - Preciso de ajuda com array de objeto

12 respostas
Kuster_01

Boa noite estou tentando resolver este exercício, mas está dando muitos erros, será que alguém pode me ajudar a entender como construir esses métodos.
Tenho que cria uma classe funcionário com atributos nome e salario e tenho que criar uma outra classe ordenação que deve conter dois métodos; um para inserir um array de objeto funcionário e outro para ordenar pelo salário em ordem decrescente; e após listar todos funcionários ordenados pelo salário em ordem decrescente.
Já fiz diversas pesquisas aqui no fórum e na apostila da Caelum, mas não estou conseguindo; o máximo que consegui foi inseri nome e salário conforme abaixo.

public class Funcionario {
		private String nome;
		private double salario;
   public Funcionario() {
    	 nome="";
    	 salario=0;
    }
    public void setNome(String nome){
    	this.nome=nome;
    }
    public void setSalario(double salario){
    	this.salario=salario;
    }
    public String getNome(){
    	return this.nome;
    }
    public double getSalario(){
    	return this.salario;
    }
}
import java.util.*;  
class Ordenacao{
	public static void main (String[] args) {
	
    Funcionario[] meusFuncionario;
    meusFuncionario = new Funcionario[5];
    Funcionario a = new Funcionario();
    
    meusFuncionario[0]= new Funcionario();
    meusFuncionario[0].setNome("Maria");
    meusFuncionario[0].setSalario(3450);
   
    meusFuncionario[1]= new Funcionario();
    meusFuncionario[1].setNome("Romário");
    meusFuncionario[1].setSalario(4500);
    
    meusFuncionario[2]= new Funcionario();
    meusFuncionario[2].setNome("Fernanda");
    meusFuncionario[2].setSalario(1550);
    
    meusFuncionario[3]= new Funcionario();
    meusFuncionario[3].setNome("Tania");
    meusFuncionario[3].setSalario(3190);
    
    meusFuncionario[4]= new Funcionario();
    meusFuncionario[4].setNome("Rodrigo");
    meusFuncionario[4].setSalario(1650);
	
   	for (int i =0; i<5; i++){
    System.out.println ("Funcionário: " +meusFuncionario[i].getNome()+ "" +"  - Salário:  " + meusFuncionario[i].getSalario());
   	}
   	for (int i=0; i<5;i++){
   		for(int=j+1; i<5; i++);
   			 if (Funcionario.getSalario[i]>Funcionario.getSalario[j]);
   			 aux = Funcionario.getSalario[i];
   			 Funcionario.getSalario[i]=Funcionario.getSalario[j];
   			 Funcionario.getSalario[j]=aux;
   		}
   
   	System.out.println ("Funcionário: " +meusFuncionario[i].getNome()+ "" +"  - Salário:  " + meusFuncionario[i].getSalario());
	}
}
    //class Salario extends Funcionario implements Comparable<Salario>{
    //List <Funcionario> Salario = new ArrayList<Funcionario>();
   	//Funcionario.getSalario().add;
	//getSalario.add;
	//Funcionario.add;
	//Funcionario.add;
	//Funcionario.add;
	
	//Collection.sort(Salario);
	
//	public double CompareTo(Salario outraSalario){
//		if (this.salario < outra.Funcionario.Salario){
//			return -1;
//		}
//		if (this.salario> outra.getSalario){
//			return 1;
//		}
//		return 0;
//		}
//	}
//	}
	
    	
   
   
//	}
	
	
	
   	
   //	List<meusFuncionario.getSalario>lista = new ArrayList<meusFuncionario.getSalario>();
   //	lista.add(meusFuncionario[0].getSalario());
   //	lista.add(meusFuncionario[1].getSalario());
  // 	lista.add(meusFuncionario[2].getSalario());
  // 	lista.add(meusFuncionario[3].getSalario());
  // 	lista.add(meusFuncionario[4].getSalario());
  // 	Collection.sort(lista);
   	
  // 	public interface Comparable<T>{
  // 	int CompareTo(T outro);
  // 	}
 //  	public getSalario implements Comparable<getSalario>{
 //  	private double getSalario;
 //  	public int Comparable (getSalario outrogetSalario)	
  // 	}

Se alguém puder ajudar eu agradeço.

12 Respostas

gRoOve

Kuster qual apostila está usando? Se for a FJ-11, qual capítulo/exercício é esse.

C
Linha 32 a 41, os problemas tao ali uma soluçao:
for (int i=0; i<5;i++){
  for(int j = 1; j<5; j++);
    if (meusFuncionario[i].getSalario() > meusFuncionario[j].getSalario()) {
        double aux = meusFuncionario[i].getSalario();
        meusFuncionario[i].setSalario(meusFuncionario[j].getSalario());
        meusFuncionario[j].setSalario(aux);
    }
   
    System.out.println ("Funcionário: " +meusFuncionario[i].getNome()+ "" +"  - Salário:  " + meusFuncionario[i].getSalario());
}
Kuster_01

É a FJ 11, mas estou utilizando ela como material de apoio, pois a da faculdade está me deixando com muitas dúvidas, ou melhor, tem muitos assuntos que não são abordados; aí descobri essa apostila e estou estudando por ela; mas a questão que estou precisando resolver não consta na apostila da Caelum.

Kuster_01
ChronosSage:
Linha 32 a 41, os problemas tao ali uma soluçao:
for (int i=0; i<5;i++){
  for(int j = 1; j<5; j++);
    if (meusFuncionario[i].getSalario() > meusFuncionario[j].getSalario()) {
        double aux = meusFuncionario[i].getSalario();
        meusFuncionario[i].setSalario(meusFuncionario[j].getSalario());
        meusFuncionario[j].setSalario(aux);
    }
   
    System.out.println ("Funcionário: " +meusFuncionario[i].getNome()+ "" +"  - Salário:  " + meusFuncionario[i].getSalario());
}

Acertei conforme sua dica, mas continua apresentando os seguintes erros.

pelo que entendi da mensagem de erro, a variavel J não foi inicializada, porém, ela é inicializada na linha 2.

C:\Documents and Settings\THZ\Meus documentos\JCreator Pro\MyProjects\X4X\Ordenacao.java:36: cannot find symbol
symbol : variable j
location: class Ordenacao
if (meusFuncionario[i].getSalario() > meusFuncionario[j].getSalario()) {
^
C:\Documents and Settings\THZ\Meus documentos\JCreator Pro\MyProjects\X4X\Ordenacao.java:38: cannot find symbol
symbol : variable j
location: class Ordenacao
meusFuncionario[i].setSalario(meusFuncionario[j].getSalario());
^
C:\Documents and Settings\THZ\Meus documentos\JCreator Pro\MyProjects\X4X\Ordenacao.java:39: cannot find symbol
symbol : variable j
location: class Ordenacao
meusFuncionario[j].setSalario(aux);
^
3 errors

Process completed.

C

mals, tem outros problemas q n percebi (problemas com chaves)

tente trocar pela linha 32 em diante

for (int i = 0; i < 5; i++) {
            for (int j = 1; j < 5; j++) {
                if (meusFuncionario[i].getSalario() > meusFuncionario[j].getSalario()) {
                    double aux = meusFuncionario[i].getSalario();
                    meusFuncionario[i].setSalario(meusFuncionario[j].getSalario());
                    meusFuncionario[j].setSalario(aux);
                }

                System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());

            }
        }
    }
}

se n funcionar, verifique se todas as chaves estao fexadas

testei o codigo completo abaixo e funcionou

class Ordenacao {

    public static void main(String[] args) {

        Funcionario[] meusFuncionario;
        meusFuncionario = new Funcionario[5];
        Funcionario a = new Funcionario();

        meusFuncionario[0] = new Funcionario();
        meusFuncionario[0].setNome("Maria");
        meusFuncionario[0].setSalario(3450);

        meusFuncionario[1] = new Funcionario();
        meusFuncionario[1].setNome("Romário");
        meusFuncionario[1].setSalario(4500);

        meusFuncionario[2] = new Funcionario();
        meusFuncionario[2].setNome("Fernanda");
        meusFuncionario[2].setSalario(1550);

        meusFuncionario[3] = new Funcionario();
        meusFuncionario[3].setNome("Tania");
        meusFuncionario[3].setSalario(3190);

        meusFuncionario[4] = new Funcionario();
        meusFuncionario[4].setNome("Rodrigo");
        meusFuncionario[4].setSalario(1650);

        for (int i = 0; i < 5; i++) {
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());
        }
        for (int i = 0; i < 5; i++) {
            for (int j = 1; j < 5; j++) {
                if (meusFuncionario[i].getSalario() > meusFuncionario[j].getSalario()) {
                    double aux = meusFuncionario[i].getSalario();
                    meusFuncionario[i].setSalario(meusFuncionario[j].getSalario());
                    meusFuncionario[j].setSalario(aux);
                }

                System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());

            }
        }
    }
}
Kuster_01
ChronosSage:
mals, tem outros problemas q n percebi (problemas com chaves)

tente trocar pela linha 32 em diante

for (int i = 0; i < 5; i++) {
            for (int j = 1; j < 5; j++) {
                if (meusFuncionario[i].getSalario() > meusFuncionario[j].getSalario()) {
                    double aux = meusFuncionario[i].getSalario();
                    meusFuncionario[i].setSalario(meusFuncionario[j].getSalario());
                    meusFuncionario[j].setSalario(aux);
                }

                System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());

            }
        }
    }
}

se n funcionar, verifique se todas as chaves estao fexadas

testei o codigo completo abaixo e funcionou

class Ordenacao {

    public static void main(String[] args) {

        Funcionario[] meusFuncionario;
        meusFuncionario = new Funcionario[5];
        Funcionario a = new Funcionario();

        meusFuncionario[0] = new Funcionario();
        meusFuncionario[0].setNome("Maria");
        meusFuncionario[0].setSalario(3450);

        meusFuncionario[1] = new Funcionario();
        meusFuncionario[1].setNome("Romário");
        meusFuncionario[1].setSalario(4500);

        meusFuncionario[2] = new Funcionario();
        meusFuncionario[2].setNome("Fernanda");
        meusFuncionario[2].setSalario(1550);

        meusFuncionario[3] = new Funcionario();
        meusFuncionario[3].setNome("Tania");
        meusFuncionario[3].setSalario(3190);

        meusFuncionario[4] = new Funcionario();
        meusFuncionario[4].setNome("Rodrigo");
        meusFuncionario[4].setSalario(1650);

        for (int i = 0; i < 5; i++) {
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());
        }
        for (int i = 0; i < 5; i++) {
            for (int j = 1; j < 5; j++) {
                if (meusFuncionario[i].getSalario() > meusFuncionario[j].getSalario()) {
                    double aux = meusFuncionario[i].getSalario();
                    meusFuncionario[i].setSalario(meusFuncionario[j].getSalario());
                    meusFuncionario[j].setSalario(aux);
                }

                System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());

            }
        }
    }
}

Bom dia,
Funcionou, porém o resultado ficou como abaixo:

Ele colocou em ordem decrescente, mas repetiu os nomes para cada valor.
Eu ainda preciso acertar isso e também colocar tudo dentro de dois métodos, um para array e outro para ordenação, mas por enquanto eu agradeço a ajuda. Vou tentar concluir estas etapas sozinho pra ver se aprendi, caso não consiga, retornarei solicitando ajuda.

--------------------Configuration: X4X - JDK version 1.6.0_22 - --------------------
Funcionário: Maria - Salário: 3450.0
Funcionário: Romário - Salário: 4500.0
Funcionário: Fernanda - Salário: 1550.0
Funcionário: Tania - Salário: 3190.0
Funcionário: Rodrigo - Salário: 1650.0
Funcionário: Maria - Salário: 3450.0
Funcionário: Maria - Salário: 1550.0
Funcionário: Maria - Salário: 1550.0
Funcionário: Maria - Salário: 1550.0
Funcionário: Romário - Salário: 4500.0
Funcionário: Romário - Salário: 3450.0
Funcionário: Romário - Salário: 3190.0
Funcionário: Romário - Salário: 1650.0
Funcionário: Fernanda - Salário: 1650.0
Funcionário: Fernanda - Salário: 1650.0
Funcionário: Fernanda - Salário: 1650.0
Funcionário: Fernanda - Salário: 1650.0
Funcionário: Tania - Salário: 3450.0
Funcionário: Tania - Salário: 1650.0
Funcionário: Tania - Salário: 1650.0
Funcionário: Tania - Salário: 1650.0
Funcionário: Rodrigo - Salário: 3190.0
Funcionário: Rodrigo - Salário: 3190.0
Funcionário: Rodrigo - Salário: 1650.0
Funcionário: Rodrigo - Salário: 1650.0

Process completed.

C

Agora entendi oq vc quer fazer, colocar os funcionarios em ordem decrescente, entao o loop é diferente(mals n li direito)

para trocar a ordem dos funcionarios:
Funcionario aux = meusFuncionario[i];
meusFuncionario[i] = meusFuncionario[j];
meusFuncionario[j] = aux;
isso abaixo so troca os salarios -.-
double aux = meusFuncionario[i].getSalario();  
meusFuncionario[i].setSalario(meusFuncionario[j].getSalario());  
meusFuncionario[j].setSalario(aux);

para ordenar, existem varios algoritmos, o mais parecido com q vc tentou usar foi o "Bubble sort"
[url]http://pt.wikipedia.org/wiki/Bubble_sort[/url]

for (int i = 0; i < 5; i++) {
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());
        }
        for (int i = 5; i >= 1; i--) {
            for (int j = 1; j < i; j++) {
                if (meusFuncionario[j - 1].getSalario() < meusFuncionario[j].getSalario()) {
                    Funcionario aux = meusFuncionario[j];
                    meusFuncionario[j] = meusFuncionario[j - 1];
                    meusFuncionario[j - 1] = aux;
                }
            }
        }
        System.out.println("Em ordem decrescente");
        for (int i = 0; i < 5; i++) {
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());
        }

completo:

import java.util.*;

class Ordenacao {

    public static void main(String[] args) {

        Funcionario[] meusFuncionario;
        meusFuncionario = new Funcionario[5];
        Funcionario a = new Funcionario();

        meusFuncionario[0] = new Funcionario();
        meusFuncionario[0].setNome("Maria");
        meusFuncionario[0].setSalario(3450);

        meusFuncionario[1] = new Funcionario();
        meusFuncionario[1].setNome("Romário");
        meusFuncionario[1].setSalario(4500);

        meusFuncionario[2] = new Funcionario();
        meusFuncionario[2].setNome("Fernanda");
        meusFuncionario[2].setSalario(1550);

        meusFuncionario[3] = new Funcionario();
        meusFuncionario[3].setNome("Tania");
        meusFuncionario[3].setSalario(3190);

        meusFuncionario[4] = new Funcionario();
        meusFuncionario[4].setNome("Rodrigo");
        meusFuncionario[4].setSalario(1650);

        for (int i = 0; i < 5; i++) {
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());
        }
        for (int i = 5; i >= 1; i--) {
            for (int j = 1; j < i; j++) {
                if (meusFuncionario[j - 1].getSalario() < meusFuncionario[j].getSalario()) {
                    Funcionario aux = meusFuncionario[j];
                    meusFuncionario[j] = meusFuncionario[j - 1];
                    meusFuncionario[j - 1] = aux;
                }
            }
        }
        System.out.println("Em ordem decrescente");
        for (int i = 0; i < 5; i++) {
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());
        }
    }
}

resultado:

Funcionário: Maria - Salário: 3450.0
Funcionário: Romário - Salário: 4500.0
Funcionário: Fernanda - Salário: 1550.0
Funcionário: Tania - Salário: 3190.0
Funcionário: Rodrigo - Salário: 1650.0
Em ordem decrescente
Funcionário: Romário - Salário: 4500.0
Funcionário: Maria - Salário: 3450.0
Funcionário: Tania - Salário: 3190.0
Funcionário: Rodrigo - Salário: 1650.0
Funcionário: Fernanda - Salário: 1550.0

Kuster_01

Amigo obrigado pela ajuda, era isso mesmo que estava precisando neste exercício. Ainda tenho que dividir em dois métodos; vou dar uma olhada na matéria e tentar modularizar.
Se não fosse você eu ainda estava aqui tentando sem resultado, porque não sabia da fórmula do if com a comparação com j-1.

Kuster_01

A primeira parte deu certo , agora estou tentando modularizar o exercício e já realizei conforme abaixo, porém apresenta erros, será que estou fazendo da forma correta? alguém pode me ajudar novamente?

import java.util.*;   
  
class Ordenacao {   
  
    public static void main(String[] args) {   
    insSalario();
    ordenarSalario();
    imprime_ordem_inversa();
   }
      public static void insSalario(){
       
        Funcionario[] meusFuncionario;   
        meusFuncionario = new Funcionario[5];   
        Funcionario a = new Funcionario();   
       
        meusFuncionario[0] = new Funcionario();   
        meusFuncionario[0].setNome("Maria");   
        meusFuncionario[0].setSalario(3450);   
  
        meusFuncionario[1] = new Funcionario();   
        meusFuncionario[1].setNome("Romário");   
        meusFuncionario[1].setSalario(4500);   
  
        meusFuncionario[2] = new Funcionario();   
        meusFuncionario[2].setNome("Fernanda");   
        meusFuncionario[2].setSalario(1550);   
  
        meusFuncionario[3] = new Funcionario();   
        meusFuncionario[3].setNome("Tania");   
        meusFuncionario[3].setSalario(3190);   
  
        meusFuncionario[4] = new Funcionario();   
        meusFuncionario[4].setNome("Rodrigo");   
        meusFuncionario[4].setSalario(1650);   
      
        for (int i = 0; i < 5; i++) {   
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());   
        }
    }  
    	public static void ordenarSalario(insSalario){
    	
        for (int i = 5; i >= 1; i--) {   
            for (int j = 1; j < i; j++) {   
                if (meusFuncionario[j - 1].getSalario() < meusFuncionario[j].getSalario()) {   
                    Funcionario aux = meusFuncionario[j];   
                    meusFuncionario[j] = meusFuncionario[j - 1];   
                    meusFuncionario[j - 1] = aux;   
                }   
            }   
        }  
    }
    	public static void imprime_ordem_inversa(){
    	
        System.out.println("\nEm ordem decrescente");   
        for (int i = 0; i < 5; i++) {   
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());   
        }   
    }   
}
C

existem varias formas de fazer isso

import java.util.*;

class Ordenacao {

    public static void main(String[] args) {
        //criar funcionarios
        Funcionario[] funcinarios;
        funcinarios = insSalario();
        
        //imprime a ordem atual
        System.out.println("Array apos criado:");
        imprime_na_ordem(funcinarios);

        //ordena salario
        ordenarSalario(funcinarios);

        //imprime nova ordem
        System.out.println("Array apos ordenacao:");
        imprime_na_ordem(funcinarios);
    }

    //instancia os funcionarios
    public static Funcionario[] insSalario() {

        Funcionario[] meusFuncionario;
        meusFuncionario = new Funcionario[5];
        Funcionario a = new Funcionario();

        meusFuncionario[0] = new Funcionario();
        meusFuncionario[0].setNome("Maria");
        meusFuncionario[0].setSalario(3450);

        meusFuncionario[1] = new Funcionario();
        meusFuncionario[1].setNome("Romário");
        meusFuncionario[1].setSalario(4500);

        meusFuncionario[2] = new Funcionario();
        meusFuncionario[2].setNome("Fernanda");
        meusFuncionario[2].setSalario(1550);

        meusFuncionario[3] = new Funcionario();
        meusFuncionario[3].setNome("Tania");
        meusFuncionario[3].setSalario(3190);

        meusFuncionario[4] = new Funcionario();
        meusFuncionario[4].setNome("Rodrigo");
        meusFuncionario[4].setSalario(1650);
        return meusFuncionario;
    }

    //ordena
    public static void ordenarSalario(Funcionario[] meusFuncionario) {

        int tamanhoDoArray = meusFuncionario.length;
        
        for (int i = tamanhoDoArray; i >= 1; i--) {
            for (int j = 1; j < i; j++) {
                if (meusFuncionario[j - 1].getSalario() < meusFuncionario[j].getSalario()) {
                    Funcionario aux = meusFuncionario[j];
                    meusFuncionario[j] = meusFuncionario[j - 1];
                    meusFuncionario[j - 1] = aux;
                }
            }
        }
    }

    //imprime na ordem que ta no array
    public static void imprime_na_ordem(Funcionario[] meusFuncionario) {
        int tamanhoDoArray = meusFuncionario.length;
        for (int i = 0; i < tamanhoDoArray; i++) {
            System.out.println("Funcionário: " + meusFuncionario[i].getNome() + "" + "  - Salário:  " + meusFuncionario[i].getSalario());
        }
    }

}

Resultado:
Array apos criado:
Funcionário: Maria - Salário: 3450.0
Funcionário: Romário - Salário: 4500.0
Funcionário: Fernanda - Salário: 1550.0
Funcionário: Tania - Salário: 3190.0
Funcionário: Rodrigo - Salário: 1650.0
Array apos ordenacao:
Funcionário: Romário - Salário: 4500.0
Funcionário: Maria - Salário: 3450.0
Funcionário: Tania - Salário: 3190.0
Funcionário: Rodrigo - Salário: 1650.0
Funcionário: Fernanda - Salário: 1550.0

alucardeck

lembrando que muitas vezes vc nao precisa reinventar a roda...

segue o seu aplicativo em modo 'compacto' xD

fica pra estudo:

public class Funcionario implements Comparable<Funcionario>{
	private String nome;
	private double salario;

	public Funcionario() {
		nome = "";
		salario = 0;
	}

    public Funcionario(String string, int i) {
		nome = string;
		salario = i;
	}

	@Override
	public int compareTo(Funcionario o) {
		return (int) (o.salario - this.salario); 
	}

	//getters and setters
}
import java.util.Arrays;
import java.util.Collections;


class Ordenacao {

    public static void main(String[] args) {
        //criar funcionarios
        Funcionario[] funcinarios = insSalario();
        
        //imprime a ordem atual
        System.out.println("Array apos criado:");
        for(Funcionario f : funcinarios){
        	System.out.println("Funcionário: " + f.getNome() + "" + "  - Salário:  " + f.getSalario());
        }
        System.out.println("\nApós ordenação:");
        Collections.sort(Arrays.asList(funcinarios)); 
        for(Funcionario f : funcinarios){
        	System.out.println("Funcionário: " + f.getNome() + "" + "  - Salário:  " + f.getSalario());
        }
    }

    //instancia os funcionarios
    public static Funcionario[] insSalario() {
        Funcionario[] meusFuncionario = new Funcionario[5];
        meusFuncionario[0] = new Funcionario("Maria",3450);
        meusFuncionario[1] = new Funcionario("Romário",4500);
        meusFuncionario[2] = new Funcionario("Fernanda",1550);
        meusFuncionario[3] = new Funcionario("Tania",3190);
        meusFuncionario[4] = new Funcionario("Rodrigo",1650);
        return meusFuncionario;
    }

}

agora tah certo ^^

Kuster_01

Boa Noite;
Deixo aqui meus agradecimentos a todos os colegas pela ajuda.

Criado 20 de março de 2011
Ultima resposta 22 de mar. de 2011
Respostas 12
Participantes 4