Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Laís G ®

classe Pessoa com um construtor com parâmetro e outro construtor sem p

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.