[Resolvido] - Preciso de ajuda com array de objeto

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.

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

Linha 32 a 41, os problemas tao ali
uma soluçao:

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

}[/code]

É 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.

[quote=ChronosSage]Linha 32 a 41, os problemas tao ali
uma soluçao:

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

}[/code][/quote]

[i]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.[/i]

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.

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

tente trocar pela linha 32 em diante

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

        }
    }
}

}[/code]

se n funcionar, verifique se todas as chaves estao fexadas

testei o codigo completo abaixo e funcionou

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

        }
    }
}

}[/code]

[quote=ChronosSage]mals, tem outros problemas q n percebi (problemas com chaves)

tente trocar pela linha 32 em diante

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

        }
    }
}

}[/code]

se n funcionar, verifique se todas as chaves estao fexadas

testei o codigo completo abaixo e funcionou

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

        }
    }
}

}[/code][/quote]

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.

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”
http://pt.wikipedia.org/wiki/Bubble_sort

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:

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

}[/code]

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

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.

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?

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

}
[/code]

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

lembrando que muitas vezes vc nao precisa reinventar a roda…

segue o seu aplicativo em modo ‘compacto’ xD

fica pra estudo:

[code]public class Funcionario implements Comparable{
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

}[/code]

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

}
[/code]

agora tah certo ^^

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