Construtores

8 respostas
J

Galera,
estou fazendo um programa em que tenho dois construtores na mesma classe,
o primeiro tem 2 parametros:

public DadosJ (String nome, int idade)

{

this.n=nome;

this.id=idade;

}

O meu problema é que nao consigo fazer funcionar o segundo que nao tem nenhum parametro.
Este vai servir par o caso em que o utilisador deixe vazio o nome e idade.
Assim este constructor inicialisara ele mesmo o nome e a idade com os valores:
Joao
23

Numa outra class tenho o main com:

System.out.println("Nome: ");
String ne=Keyboard.readString();
	
System.out.println("Idade: ");
int idd=Keyboard.readInt();
	
Dados d;	
d = new Banque (nomb, maxcptes);

Alguem me pode dizer como é que tenho que definir o segundo construtor na classe DadosJ e o q tenho q
pôr no main para que se o utilisador deixe os campos nome e idade vazio, ele utilise o segundo construtor
e nao o primeiro.

Muito obrigado. :wink:

8 Respostas

peczenyj

public class A{ public A() { System.out.println("construtor sem parametros"); } public A(int x, int y) { System.out.println("construtor com 2 parametros"); } public static void main(String [] xxx){ A objX = new A(); A objY = new A(1,2); } }

ViniGodoy

Se você criar qualquer construtor, o java não criará para você o construtor sem parâmetros automaticamente.
Você deve cria-lo manualmente.

Pode ser algo assim:

public DadosJ() { this.n = ""; this.idade = 0; }

Mas, no caso da sua classe, um construtor assim deveria mesmo existir? Que sentido tem cria-lo?

peczenyj

Se faz sentido, vc também pode invocar um construtor dentro do outro através do this

public class A{ private int y; private String x; public A() { this("",0); } public A(String x, int y) { this.x=x; this.y=y;} public static void main(String [] xxx){ A objX = new A(); // é o mesmo que new A("",0); A objY = new A("oi",25); } }

J
public class A 
{
     private String n;
     private int idd;
	
     public A (String nome, int idade)
     {
         this.n = nome;
         this.idd = idade;
     }

     public A ()
     {
         this ("Joao", 23);
		
      }

	
      String getnom()
      {
          return this.n;
      }

	
      int getidade()
      {
          return this.idd;
        }

}

/*******************************************************************************************/

public class princip 
{
     public static void main(String [] args)
     {   
		
         System.out.println("Indique o Nome (deixe vazio para ter o nome por predefinido): ");
         String nom=Keyboard.readString();
			
          System.out.print("Indique a Idade: ");
          int id=Keyboard.readInt();
			
          A a1;
          a1= new A ();
          a1 = new A (nom, id);
		
          System.out.println(a1.getnom());
          System.out.println(a1.getidade());
     }
}

Obrigado por me terem respondido. é quase isso o q eu quero. So que a diferenca é q a referencia tem q ser a mesma, a1 como aqui em cima.

Quero q para o mesmo objeto, haja a possibilidade de haver dois resultados dependendo do que o utilisador
indica para o nome e idade.

Indique o Nome (deixe vazio para ter o nome por predefinido): (vazio)
Indique a idade (ponha 0 para ter a idade predefinida): 0
Joao
23

//ou entao:

Indique o Nome (deixe vazio para ter o nome por predefinido): Vaz
Indique a idade (ponha 0 para ter a idade predefinida): 24
Vaz
24

Sabem como fazer? :roll:

Hermanitto
public A (String nome, int idade)   
     {   
         this.n = nome;   
         this.idd = idade;   
     }   
  
     public A () {} 

     public A(){
     this.n = null;
     this.idd = 0;   
}

Tente fazer assim… talves funcione.

J

nao é bem isso :cry:
Alguem tem mais alguma ideia de como fazer?

peczenyj

Não parece ser o caso de utilizar construtores.

class Pessoa{
 private int idade;
 private String nome;
 /* getters ans setters */
}
class Programa{
  public static void main(String [] xxx){
     int idadePadrao = 0;
     String nomePadrao = "Jose"
     Pessoa p = new Pessoa();
    
     /* aqui vc pergunta a idade. SE não for informada, vc seta a idadePadrao */
  }
}
J
public class A   
{   
     private String n;   
     private int idd;   
       
     public A (String nome, int idade) {   
         this.n = nome;   
         this.idd = idade;   
     }   
  
     public A () {   
         this.n="Joao";
         this.idd=23;
           
      }   
  
       
      String getnom() {   
          return this.n; }   

      int getidade()  {   
          return this.idd; }   
  
}   
  


public class princip   
{   
     public static void main(String [] args) {     
         
         System.out.println("Indique o Nome (deixe vazio para ter o nome por predefinido): ");   
         String nom=Keyboard.readString();   
               
          System.out.print("Indique a Idade(deixe vazio para ter o nome por predefinido):  ");   
          int id=Keyboard.readInt();   
               
          A a1 = new A ();   

          if (nom!=null & id!=0)
          {
	a1 = new a (nom, id);
           }	

          System.out.println(a1.getnom());
          System.out.println(a1.getidade());
     }   
}

Oi, estava aqui a experimentar e consegui chegar ao que eu quero...ou quase :D Acrescentei um if. O que ele faz agora é que inicializa o nome com Joao e idade 23 com o construtor (sem parametros) mas se o utilizador nao deixar vazio o nome e nem der 0 à idade, ele executa o constructor [public A (String nome, int idade)] e afixa o nome e idade q o utilizador indicou, exemplo Nuno 21.

O unico problema é q so funciona se nao preencher nenhum dos dois dados ou entao preencher os dois.
Nao funciona se por exemplo ele deixar o nome vazio mas der um valor diferente de 0 à idade, ou vice-versa. :mrgreen:

Alguma ideia?

Obrigado.

Criado 2 de março de 2008
Ultima resposta 2 de mar. de 2008
Respostas 8
Participantes 4