Laís G ® 0 Denunciar post Postado Outubro 11, 2010 Olá pessoal, será que alguém pode por obséquio me ajudar a solucionar esta questão? 1) Escreva a classe Pessoa com atributos nome (tipo String), sobrenome (tipo String), idade (tipo int) e pessoasCriadas (int). Cada um desses atributos deve ter métodos para lê-los e alterá-los (getters e setters). Fora da classe, esses atributos só poderão ser modificados através dos getters e setters. A classe Pessoa ainda deve ter um método chamado getNomeCompleto que não possui parâmetros de entrada e que retorna a concatenação do atributo nome com o atributo sobrenome. E o método toString(), que deve mostrar a idade e nome completo de uma pessoa, utilizando o método getNomeCompleto(). Além disso, a classe deve possuir um construtor sem parâmetros e um outro construtor que recebe como parâmetros o nome e o sobrenome da pessoa e altera respectivamente os atributos nome e sobrenome. ● Ambos os construtores devem atribuir ao atributo idade a ordem em que a pessoa foi criada, e incrementar o atributo pessoasCriadas. ● Adicione na sua classe o metodo ordenaPessoas, que recebe um vetor de Pessoas e retorna um vetor de Pessoas em ordem alfabética. Considere na sua ordenação o nome e sobrenome de uma pessoa. Essa parte está beleza! public class Pessoa { public static int pessoasCriadas; private String nome; private String sobrenome; private int idade; Pessoa(){ idade = pessoasCriadas ++; } Pessoa(String nome, String sobrenome, int idade){ this(); this.nome = nome; this.sobrenome = sobrenome; this.idade = pessoasCriadas++; } public static int getPessoasCriadas() { return pessoasCriadas; } public int getIdade() { return idade; } public void setIdade(int idade) { this.idade = idade; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getSobrenome() { return sobrenome; } public void setSobrenome(String sobrenome) { this.sobrenome = sobrenome; } public String getNomeCompleto(){ return getNome() +" "+ getSobrenome(); }A partir daqui começa o problema! public String toString (){ return getIdade() + " - " + getNomeCompleto(); } // Getters and Setters Pessoa [] ordenaPessoas (Pessoa[] pessoas) { } public String compareTo (Pessoa individuo); return getNomeCompleto().compareTo(individuo.getNomeCompleto()); } Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Outubro 11, 2010 A partir daqui começa o problema! Pessoa [] ordenaPessoas (Pessoa[] pessoas) { } public String compareTo (Pessoa individuo); return getNomeCompleto().compareTo(individuo.getNomeCompleto()); } Laís, pelo que entendi você quer atribuir a responsabilidade do "ordenaPessoas" à classe Pessoa, se for realmente isso, não faça assim. Jamais dê aos seus objetos, mais responsabilidades do que eles realmente precisam para trabalhar. Um outro detalhe que me incomodou, foi a mistura de idiomas, mas isso não é culpa sua já que o próprio exercício induz a esse erro. Não existe qualquer problema em você escrever código 100% em português ou 100% em inglês, mas se decidir por um idioma, utilize-o até o fim, não faça coisas como getNomeDaPessoa(), é feio. package example; public class Person implements Comparable<Person> { private static int instances = 0; private int age; private String firstName; private String lastName; public Person( int age ){ ++instances; setAge( age ); } public Person( String firstName , String lastName ){ ++instances; setFirstName( firstName ); setLastName( lastName ); } public int compareTo( Person b ){ return getFullName().compareTo( b.getFullName() ); } public static int countInstances(){ return instances; } public int getAge(){ return age; } public String getFirstName(){ return firstName; } public String getFullName(){ return firstName + " " + lastName; } public String getLastName(){ return lastName; } public void setAge( int newAge ){ age = newAge; } public void setFirstName( String newFirstName ){ firstName = newFirstName; } public void setLastName( String newLastName ){ lastName = newLastName; } public String toString(){ return getFullName(); } } Perceba que Person é um objeto Comparable, o método de interface compareTo() será utilizado na hora da ordenação. package example; import example.Person; public class People { private Person[] list; private int offset = 0; private int length = 0; public People( Person[] people ){ list = people; length = list.length; } public Person current(){ return list[ offset ]; } public void next(){ ++offset; } private void qsort( int l , int r ){ int i = l; int j = r; int m = ( l + r ) / 2; Person p = list[ m ]; if ( i < j ){ while ( list[ i ].compareTo( p ) < 0 ) ++i; while ( list[ j ].compareTo( p ) > 0 ) --j; if ( i <= j ){ Person a = list[ i ]; Person b = list[ j ]; if ( !a.equals( b ) ){ list[ i ] = b; list[ j ] = a; } ++i; --j; } } if ( j > l ) qsort( l , j ); if ( i < r ) qsort( i , r ); } public void rewind(){ offset = 0; } public void sort(){ qsort( 0 , length - 1 ); } public Person[] toArray(){ return list; } public Boolean valid(){ return offset < length; } } Como pode ver, a responsabilidade de ordenar fica desacoplada do tipo de objeto que será ordenado, isso é fundamental para criação de objetos reutilizáveis. Você poderia generalizar People para SortableList e poder ordenar qualquer coisa: Utilizando o código acima: import example.Person; import example.People; public class Example { public static void main(String[] args) { Person[] p = { new Person( "Fulano" , "de tal" ), new Person( "João" , "Neto" ), new Person( "Felisbino" , "da silva" ) }; People people = new People( p ); System.out.printf( "Lista antes de ordenar\n" ); for ( people.rewind() ; people.valid() ; people.next() ){ System.out.printf( "\t%s\n" , people.current() ); } people.sort(); System.out.printf( "\nLista depois de ordenar\n" ); for ( people.rewind() ; people.valid() ; people.next() ){ System.out.printf( "\t%s\n" , people.current() ); } System.out.printf( "\nIterando a matriz\n" ); p = people.toArray(); for ( int i = 0 , t = p.length ; i < t ; ++i ){ System.out.printf( "\t%d - %s\n" , i , p[ i ] ); } } } A saída: Lista antes de ordenar Fulano de tal João Neto Felisbino da silva Lista depois de ordenar Felisbino da silva Fulano de tal João Neto Iterando a matriz 0 - Felisbino da silva 1 - Fulano de tal 2 - João Neto Compartilhar este post Link para o post Compartilhar em outros sites
Laís G ® 0 Denunciar post Postado Outubro 11, 2010 Obrigada pelas dicas João, mas teve um pequeno probleminha aqui: People people = new People ( p ); Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Outubro 11, 2010 E qual foi o problema ? Compartilhar este post Link para o post Compartilhar em outros sites
Laís G ® 0 Denunciar post Postado Outubro 11, 2010 E qual foi o problema ? Não está executando, tá dando um erro nessa parte: People people = new People ( p ); E qual foi o problema ? Não está executando, tá dando um erro nessa parte: People people = new People ( p ); Compartilhar este post Link para o post Compartilhar em outros sites