Java - Ayuda JAVA Código

 
Vista:

Ayuda JAVA Código

Publicado por Juan (24 intervenciones) el 29/08/2021 04:43:39
Mis respetos a todos los integrantes de esta comunidad. Escribo para consultar sus críticas sobre mi código escrito que me lo encomendaron en el trabajo. No puedo resolver el punto 6 “El id debe ser el último id + 1”. Además no puedo resolver el punto 11. Sobre concatenamiento de fechas. Si es posible que verifiquen mi código y señalen los errores. Deseo la ayuda de todos ustedes sobre dichos puntos y en general sobre mi código. Saludos a todos.

/*
1. Crear la clase Persona en el paquete paqu1 con los métodos get y set para cada Atributo.
2. Crear la clase Administrador que extiende de la clase Persona en el Paquete paqu2.
Crear los métodos para modificar/acceder a los atributos(no deben ser los métodos get ni set)
3.Crear la clase Empleado que extiende la clase Persona en el paquete paqu3. Crear los métodos para
modificar/accedr a los atributos (no deben ser los métodos get ni set)
4.Crear la clase Cliente que extiende de la clase Persona en el paquete paqu4, con los métodos get y ser para cada Atributo
5. Cargar los siguiente datos del Administrador (en el paquete paqu5)
■ id=1, cargo= G, cantEmpleados=100
■cargo G= GERENTE GENERAL, H=JEFE DE RECURSOS HUMANOS
■cargar todos los datos: del padre y del hijo
6. Crear dos objetos de la clase Empleado con los siguiente datos (en el paquete paqu5):
■ Empleado1: por Hora (porHora=true) y su salario debe ser de 100.000. El id debe ser el último id + 1
■ Cargar todos los datos del padre y del hijo
7. Crear dos objetos de la clase Cliente en el paquete paqu5, con los siguientes datos
■ Cliente1: diaNacimiento=10, mesNacimiento=2,anioNacimiento=1980
■ Cliente1: diaNacimiento=20, mesNacimiento=4,anioNacimiento=1983
■ Cargar todos los datos: del padre y del hijo
8. Crear un método en la clase correspondiente que retorne la cadena MASCULINO/FEMENINO según el valor del atributo sexo
9. Crear un método en la clase Empleado que según el valor del atributo porHora retorne la cadena POR HORA/MENSUALERO
10. Crear un método en la clase Empleado solo para los empleados por hora (porHora=true) que calcule el salario de dicho
empleado en base a la cantidad de horas
■ cantidad de horas trabajadas: 40 horas
■ El método debe retornar el salario de dicho Empleado
11. Crear un método en la clase cliente que concatene el valor de los atributos diaNacimiento, mesNacimiento y anioNacimiento y retorne
la fecha compelta de nacimiento (Por ej,: 10/2/1980)
12. Desplegar por pantalla los datos del Administrador, de la siguiente forma
■ Los datos del Administrador son:
<id+nombres+edad+direcion+sexo+cargo+cantEmpleados>
■ Para el atributo sexo desplegar la cadena correspondiente.
■ Para el atributo cargo desplegar la cadena correspondiente.
13. Desplegar por pantalla los datos de los Empleados, de la siguiente forma
■ Empleado 1: <id+nombres+edad+direccion+sexo+porHora+salario>
■ Empleado 2: <id+nombres+edad+direccion+sexo+porHora+salario>
■ Para el atributo sexo desplegar la cadena correspondiete.
■ Para el atributo salario desplegar el salario en base al cálculo realizado en el punto 10(para el empleado por hora)
14. Desplegar por pantalla los datos de los Clientes, de la siguiente forma
■ Cliente 1:
id+nombres+edad+direccion+sexo+fecha de nacimiento>. La fecha de nacimiento se debe desplegar de la siguiente forma: 10/2/1980.
■ Cliente 2:
<id+nombres+edad+direccion+sexo+fecha de nacimiento>. La fecha de nacimiento debe desplegar de la siguiente forma:20/4/1983
■ Para el atributo sexo desplegar la cadena correspondiente
*/

package paqu1;


public class Persona {
int id;
String nombres;
int edad;
String direccion;
char sexo;

public void setId(int id){
this.id = id;
}
public int getId(){
return id;
}
public void setNombres(String nombres){
this.nombres = nombres;
}
public String getNombres(){
return nombres;
}
public void setEdad(int edad){
this.edad = edad;
}
public int getEdad(){
return edad;
}
public void setDireccion(String direccion){
this.direccion = direccion;
}
public String getDireccion(){
return direccion;
}
public void setSexo(char sexo){
this.sexo = sexo;
}
public char getSexo(){
return sexo;
}

/*8. Crear un método en la clase correspondiente que retorne la cadena MASCULINO/FEMENINO según el valor del atributo sexo*/

String devolversexo(){
if (sexo=='M'){
System.out.println("MASCULINO");
}
else {
if (sexo=='F'){
System.out.println("FEMENINO");
}
return sexo;

}
}

}


package paqu2;
import paqu1.*;

public class Administrador extends Persona{
char cargo;
String cantEmpleados;

public void cargarCargo(char cargo){
this.cargo = cargo;
}

public char obtenerCargo(){
return cargo;
}
public void cargarcantEmpleado(String cantEmpleados){
this.cantEmpleados = cantEmpleados;
}
public String obtenercantEmpleados(){
return cantEmpleados;
}

/*12 Desplegar por pantalla los datos del Administrador, de la siguiente forma
■Los datos del Administrador son:
<id+nombres+edad+direccion+sexo+cargo+cantEmpleado>
■Para el atributo sexo desplegar la cadena correspondiente.
■ Para el atributo cargo desplegar la cadena correspondiente*/
System.out.println("Los datos del Administrador son:" administrador1.obtenercargo()+administrador1.obtenercantEmpleados()+administrador1.obtenerDireccion()+admninistrador1.obtenerSexo()+administrador1.obtenercantEmpleados();

String deplegarsexo(char sexo){
if (sexo=='M'){
System.out.println("MASCULINO");

}else{
if (sexo=='F'){
System.out.println("FEMENINO");

return sexo;
}
}
}
char desplegarcargo(){
if (cargo=='G'){
System.out.println("GERENTE GENERAL");

}else{
if (cargo=='H'){
System.out.println("JEFE DE RECURSOS HUMANOS");
}
}
}

}

package paqu3;
import paqu1.*;



public class Empleado extends Persona{
boolean porHora;
int salario;

public void setporHora(boolean porHora){
this.porHora = porHora;
}
public boolean getporHora(){
return porHora;
}
public void setSalario(int salario){
this.salario = salario;
}
public int getSalario(){
return salario;
}
/*
9.Crear un método en la clase Empleado que según el valor del atributo porHora retorne la cadena POR HORA/MENSUALERO*/
String Horario(){
if (porHora == true){

System.out.println("POR HORA");
}
else
if (porHora == false){

System.out.println("MENSUALERO");

return porHora;
}
}
/*10. Crear un método en la clase Empleado solo para los empleados por hora (porHora=true) que calcule al salario dicho empleado en base a la
cantidad de horas trabajadas que recibe como parámeto
■cantidad de horas trabajas:40 horas
■El método debe retornar el salario de dicho Empleado
*/
int calcularsalario(){
if (porHora==true){
salario = (40*salario);
return salario;
}

}


}
package paqu4;
import paqu1.*;

public class Cliente extends Persona{
int diaNacimiento;
int mesNacimiento;
int anioNacimiento;

public void setdiaNacimiento(int diaNacimiento){
this.diaNacimiento = diaNacimiento;
}
public int getdiaNacimiento(){
return diaNacimiento;
}
public void setmesNacimiento(int mesNacimiento){
this.mesNacimiento = mesNacimiento;
}
public int getmesNacimiento(){
return mesNacimiento;
}
public void setanioNacimiento(int anioNacimiento){
this.anioNacimiento = anioNacimiento;
}
public int getanioNacimiento(){
return anioNacimiento;
}

}
}


package paqu5;
import paqu1.*;
import paqu2.*;
import paqu3.*;
import paqu4.*;



public class Principal {
public static void main(String [] args){
Administrador administrador1 = new Administrador();
administrador1.setId(1);
administrador1.setSexo('G');
administrador1.cargarcantEmpleado("100");
administrador1.cargarCargo('G');
administrador1.cargarCargo('H');
administrador1.setDireccion("Avenida Mariscal Lopez");

/*13. Desplegar por pantalla los datos de los Empleados, de la siguiente forma
■Empleado 1: <id+nombres+edad+direccion+sexo+porHora+salario>.
■Empleado 2: <id+nombres+edad+direccion+sexo+porHora+salario>.
■Para el atributo sexo desplegar la cadena correspondiente
■Para el atributo salario desplegar el salario en vase al cálculo realizado en el punto 10(para el empleado por hora)*/
Empleado empleado1 = new Empleado();
empleado1.setporHora(true);
empleado1.setSalario(100000);
empleado1.setNombres("Jose Luis");
empleado1.setEdad(18);
empleado1.setDireccion("Carlos Antonio Lopez");
empleado1.setSexo('M');

/*El id debe ser el último id + 1*/
Empleado empleado2 = new Empleado();
empleado2.setporHora(false);
empleado2.setSalario(1600000);
empleado2.setNombres("Fernando Carlos");
empleado2.setEdad(21);
empleado2.setDireccion("Independencia Nacional");
empleado2.setSexo('M');
/*El id debe ser el último id +1*/
Cliente cliente1 = new Cliente();
cliente1.setdiaNacimiento(10);
cliente1.setmesNacimiento(2);
cliente1.setanioNacimiento(1980);
cliente1.setId(715);
cliente1.setNombres("Ada Luz");
cliente1.setEdad(20);
cliente1.setDireccion("Avenida España");
cliente1.setSexo('F');

Cliente cliente2 = new Cliente();
cliente2.setdiaNacimiento(20);
cliente2.setmesNacimiento(4);
cliente2.setanioNacimiento(1983);
cliente2.setNombres("Carlos Jose");
cliente2.setEdad(30);
cliente2.setDireccion("25 proyectadas");
cliente2.setSexo('M');

System.out.println("Los datos del Administrador son:"+administrador1.getId()+administrador1.getSexo()+administrador1.obtenercantEmpleados()+administrador1.obtenerCargo()+administrador1.getNombres()+administrador1.getEdad());
System.out.println("Empleado 1:"+empleado1.getId()+empleado1.getSexo()+empleado1.getNombres()+empleado1.getDireccion()+empleado1.getSexo());
System.out.println("Empleado 2:"+empleado2.getId()+empleado2.getSexo()+empleado2.getNombres()+empleado2.getDireccion()+empleado1.getSexo());
System.out.println("Cliente 1:"+cliente1.getId()+cliente1.getSexo()+cliente1.getNombres()+cliente1.getDireccion());
System.out.println("Cliente 2:"+cliente2.getId()+cliente2.getSexo()+cliente2.getNombres()+cliente2.getDireccion());

}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda JAVA Código

Publicado por Kabuto (1381 intervenciones) el 30/08/2021 21:50:07
Hola.

Veo que ninguna de las clase tiene atributos private, lo cuál incumple el Principio de Encapsulamiento

Lo ideal es que los atributos sean privados, de manera que solo sean visibles DENTRO de su propia clase. Precisamente los métodos getter/setter su propósito es proporcionar acceso público (desde otras clases) pero de una forma controlada.

Como no especificas cuál es nivel de acceso a los atributos, tampoco son de acceso totalmente público, quedan en un nivel de acceso llamado package, que significa que clases que estuvieran dentro de su mismo paquete, sí tendrían acceso libre a esos atributos.

Todo esto no es grave, no es un gran problema..., pero digamos que va contra "las buenas costumbres".
Lo ideal es declarar los atributos siempre como private.
Luego, durante el desarrollo del programa, es posible que nos veamos en la necesidad de darle a algún atributo un acceso más amplio: protected, public, ..
Pero es poco habitual, y por costumbre, se empieza con nivel private y luego ya se verá.


Veo que las clases tampoco tienen constructores definidos. Se puede vivir sin ellos, cierto...., pero de nuevo choca con las "buenas costumbres"
Lo suyo es proporcionar al menos un constructor a la clase, que reciba por paréntesis los datos para dar valores a los atributos.
Si no a todos, al menos, los que consideremos imprescindibles para tener un objeto que pueda representar a la clase.

Por ejemplo, para representar a una Persona puede que no necesitemos obligatoriamente su dirección.., ni su edad.
Pero su id y nombres..., sería lo mínimo para poder registrar a alguien en nuestra base de datos, así que tendríamos que impedir la posibilidad de construir un objeto Persona si no recibe un id y los nombres.
Y esto lo logramos definiendo un constructor que reciba esos datos que consideremos imprescindibles.

Pero vamos, si tenemos dudas, o si no nos han indicado exigencias sobre esto... lo ideal es hacer un constructor que reciba todos los datos.
Y, si queremos, también otro constructor "vacío", uno que no reciba nada, pero que inicialice los atributos con valores genéricos.
De este modo podremos crear objetos de las dos formas: sin dar valores al constructor, o dandole todos los valores.

La clase Persona podría quedar así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package paqu1;
 
public class Persona {
 
	private int id;
	private String nombres;
	private int edad;
	private String direccion;
	private char sexo;
 
	public Persona() {
		id = 0;
		nombres = "";
		edad = 0;
		direccion = "";
		sexo = ' ';
	}
 
	public Persona(int id, String nombres, int edad, String direccion, char sexo) {
		this.id = id;
		this.nombres = nombres;
		this.edad = edad;
		this.direccion = direccion;
		this.sexo = sexo;
	}
 
	public void setId(int id){
		this.id = id;
	}
	public int getId(){
		return id;
	}
	public void setNombres(String nombres){
		this.nombres = nombres;
	}
	public String getNombres(){
		return nombres;
	}
	public void setEdad(int edad){
		this.edad = edad;
	}
	public int getEdad(){
		return edad;
	}
	public void setDireccion(String direccion){
		this.direccion = direccion;
	}
	public String getDireccion(){
		return direccion;
	}
	public void setSexo(char sexo){
		this.sexo = sexo;
	}
	public char getSexo(){
		return sexo;
	}
 
}


El resto de clases también deberían tener sus atributos como private.
Y no estaría de más que también tuvieran constructores, los cuáles tendrían que pedir tanto los atributos de la clase madre, como los suyos propios.
Pero bueno, esto de momento lo puedes dejar a tu elección, si quieres darles constructores o no.

Yo, a modo de ejemplo, a Administrador le he puesto un constructor que pide los datos para los atributos de su clase madre.
Pero no pide valores para sus propios atributos: cargo y cantEmpleados
Por cierto, el atributo cantEmpleados debería ser un int, no String, ya que representa "cantidades"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Administrador extends Persona {
 
	private char cargo;
	private int cantEmpleados;
 
	//Constructor con los datos para construir una Persona, la madre de esta clase
	public Administrador(int id, String nombres, int edad, String direccion, char sexo) {
		super(id, nombres, edad, direccion, sexo);
	}
 
	public void cargarCargo(char cargo){
		this.cargo = cargo;
	}
 
	public char obtenerCargo(){
		return cargo;
	}
 
	public void cargarcantEmpleado(int cantEmpleados){
		this.cantEmpleados = cantEmpleados;
	}
 
	public int obtenercantEmpleados(){
		return cantEmpleados;
	}
 
}


En la clase Principal, parece que al Administrador le estás dando un valor no válido para el sexo, debería ser 'H'(hombre) o 'M'(mujer).
O 'M'(masculino) y 'F'(femenino)
No 'G', que eso parece ser un valor para el cargo.

Sobre el cargo, no creo que haga falta aplicárselo dos veces:

1
2
3
4
5
6
7
8
9
10
11
12
public class Principal {
 
	public static void main(String [] args){
		Administrador administrador1 = new Administrador();
		administrador1.setId(1);
		administrador1.setSexo('G');
		administrador1.cargarcantEmpleado(100);
		administrador1.cargarCargo('G');
		administrador1.cargarCargo('H');
		administrador1.setDireccion("Avenida Mariscal Lopez");
	}
}

el enunciado explica que hay dos: 'G' (gerente) y 'H' (jefe rrhh)
Pero en principio habría que ponerle solo 'G'.
Por cierto, fíjate que ahora que tenemos constructor, podemos crear un Administrador dándole los datos necesarios para crear Persona (su clase madre).
Y ya luego cargarle los valores para sus propios atributos:

1
2
3
4
5
6
7
8
9
public class Principal {
 
	public static void main(String [] args){
		Administrador administrador1 = new Administrador(1,"Juan Perez",
				35, "Avenida Mariscal Lopez", 'M');
		administrador1.cargarcantEmpleado(100);
		administrador1.cargarCargo('G');
	}
}

Luego nos pide crear dos objetos Empleado.
Si a esta clase no le damos constructor, habrá que cargar todos sus datos uno a uno. Y sería válido, por que no...
Pero por mi parte creo más cómodo hacer lo mismo que con Administrador, y darle un constructor que como mínimo pida los datos para los atributos de su clase madre.
Esto luego nos permite ahorrar líneas de código, porque necesitaremos menos instrucciones para cargarles todos los datos.

Así quedaría Empleado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Empleado extends Persona {
 
	private boolean porHora;
	private int salario;
 
	//Constructor con los datos para construir una Persona, la madre de esta clase
	public Empleado(int id, String nombres, int edad, String direccion, char sexo) {
		super(id, nombres, edad, direccion, sexo);
	}
 
	public void setporHora(boolean porHora){
		this.porHora = porHora;
	}
	public boolean getporHora(){
		return porHora;
	}
	public void setSalario(int salario){
		this.salario = salario;
	}
	public int getSalario(){
		return salario;
	}
 
}


Y así podemos crearlos en pocas líneas.
Fíjate que para el ID, lo que hacemos es pedirle el ID del objeto creado anteriormente y sumarle +1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String [] args){
		Administrador administrador1 = new Administrador(1,"Juan Perez",
				35, "Avenida Mariscal Lopez", 'M');
		administrador1.cargarcantEmpleado(100);
		administrador1.cargarCargo('G');
 
		//Creamos empleados, sus ID son el último + 1
		Empleado empleado1 = new Empleado(administrador1.getId() + 1, "Jose Luis",
				18, "Carlos Antonio Lopez", 'M');
		empleado1.setporHora(true);
		empleado1.setSalario(100000);
 
		Empleado empleado2 = new Empleado(empleado1.getId() + 1, "Fernando Carlos",
				21, "Independencia Nacional", 'M');
		empleado2.setporHora(false);
		empleado2.setSalario(1600000);
 
	}

Ahora nos piden dos clientes. Por mi parte haré lo mismo, darle un constructor para poder crear un objeto con los datos básicos de forma rápida.
Esto no solo ahorra código como hemos visto, si no que impide que nos olvidemos de algún dato importante.
Tú por ejemplo, al cliente2 no le has dado ningún valor para el ID y en un programa "real" este sería precisamente el dato más importante, porque seguramente sería el dato que se usará para indexar al cliente en la base de datos de la empresa.
En cambio usando constructores, podremos obligar a recibir ese dato antes de crear el objeto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static void main(String [] args){
		Administrador administrador1 = new Administrador(1,"Juan Perez",
				35, "Avenida Mariscal Lopez", 'M');
		administrador1.cargarcantEmpleado(100);
		administrador1.cargarCargo('G');
 
		//Creamos empleados, sus ID son el último + 1
		Empleado empleado1 = new Empleado(administrador1.getId() + 1, "Jose Luis",
				18, "Carlos Antonio Lopez", 'M');
		empleado1.setporHora(true);
		empleado1.setSalario(100000);
 
		Empleado empleado2 = new Empleado(empleado1.getId() + 1, "Fernando Carlos",
				21, "Independencia Nacional", 'M');
		empleado2.setporHora(false);
		empleado2.setSalario(1600000);
 
		//Creamos Clientes
		Cliente cliente1 = new Cliente(715, "Ada Luz",
				20, "Avenida España", 'F');
		cliente1.setdiaNacimiento(10);
		cliente1.setmesNacimiento(2);
		cliente1.setanioNacimiento(1980);
 
		Cliente cliente2 = new Cliente(700, "Carlos Jose",
				23, "25 proyectadas", 'M');
		cliente2.setdiaNacimiento(20);
		cliente2.setmesNacimiento(4);
		cliente2.setanioNacimiento(1983);
	}

A continuación nos piden:
Crear un método en la clase correspondiente que retorne la cadena MASCULINO/FEMENINO según el valor del atributo sexo

Esto veo que has declarado más de una vez este método, y no se si en distintas clases o qué..
Tampoco le has especificado nivel de acceso, deberías especificar que es public
Por norma general: atributos son private y métodos son public, aunque por supuesto habrán excepciones

Solo necesitas declararlo una vez, en la clase Persona y como public, y el resto de clases lo heredarán.
El código que has puesto, no es correcto del todo:
1
2
3
4
5
6
7
8
9
String devolversexo(){
if (sexo=='M'){
System.out.println("MASCULINO");
}
else {
if (sexo=='F'){
System.out.println("FEMENINO");
}
return sexo;

Este método no debe hacer ningún system.out en pantalla, tan solo ha de retornar un String u otro.
Quedaría mejor así:
1
2
3
4
5
6
7
public String devolversexo(){
if (sexo=='M'){
return "MASCULINO";
}
else {
return "FEMENINO";
}

Y si sabes como usar el operador ternario, puede reducirse a esto:
1
2
3
public String devolverSexo() {
		return sexo=='M'?"MASCULINO":"FEMENINO";
	}


¡¡Y ahora mismo me quedo sin tiempo!!
Luego más tarde intentaré seguir repasando los puntos restantes del enunciado.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda JAVA Código

Publicado por Kabuto (1381 intervenciones) el 31/08/2021 01:33:51
Siguiente punto:
Crear un método en la clase Empleado que según el valor del atributo porHora retorne la cadena POR HORA/MENSUALERO

Como el anterior, este método no ha de mostrar nada en pantalla, solo retornar el String adecuado.
1
2
3
4
5
6
public String horario() {
		if (porHora)
				return "POR HORA";
		else
				return "MENSUALERO";
	}

Y usando bien el operador ternario, queda muy simplificado:
1
2
3
public String horario() {
		return porHora?"POR HORA":"MENSUALERO";
	}

Seguimos:
10. Crear un método en la clase Empleado solo para los empleados por hora (porHora=true) que calcule el salario de dicho
empleado en base a la cantidad de horas
■ cantidad de horas trabajadas: 40 horas
■ El método debe retornar el salario de dicho Empleado

Bien, este punto del enunciado está MAL planteado.
Cuando se llame a este método, si es empleado por hora, se calcula y retorna el salario. Vale..
Pero, ¿si no es por hora..., qué retornamos?
Porque un método que retorna un valor, SIEMPRE ha de retornar "algo".

Tú has propuesto esta solución:
1
2
3
4
5
6
public int calcularsalario(){
		if (porHora==true){
			salario = (40*salario);
			return salario;
		}
	}
Hay dos cosas mal:
- Un error de diseño (fallo tuyo)
- Un error de lógica (fallo del que redactó el enunciado)

El error de diseño, tu fallo, es que estás modificando el valor del atributo salario.
No hay que modificarlo, porque ese atributo representa lo que cobra el empleado por una hora.
Tan solo hay que multiplicar por 40 y retornar el resultado, pero no alterar el atributo salario.

Porque si lo modificas, cada vez que llamemos a este método, el salario aumentará en 40 veces (el empleado estará muy contento, eso sí)
Por tanto, solo hay que retornar el resultado de hacer el producto, pero no se guarda.
1
2
3
4
5
public int calcularsalario(){
		if (porHora==true){
			return 40*salario;
		}
	}

Eso arreglado, pero aún tiene el error de lógica.
Si intentamos ejecutar el programa, el compilador dará un error, porque ese método no GARANTIZA que vaya a retornar algo cuando sea invocado.
De hecho, no hace falta ni intentar ejecutarlo. Si usas algún IDE como Eclipse, NetBeans, IntelliJ,.... seguro que al momento de escribirlo te mostrará un mensaje de error como este:
imagen-2021-08-31-004416

El mensaje dice:
"Este método ha de retornar un resultado de tipo int"

Y dice eso porque solo devuelve un int, si es porHora es true.
Pero si es false, no le estamos diciendo qué ha de retornar, y eso es inaceptable para el compilador.
El método ha de GARANTIZAR que se va a retornar algo, en cualquier posible caso.

Por eso digo, que está mal planteado este punto del ejercicio, pero bueno, ya que no nos especifican nada, podemos solucionarlo haciendo que retorne valor 0 si no es un empleado por horas:
1
2
3
4
5
6
7
public int calcularsalario(){
		if (porHora==true){
			return 40*salario;
		}
		else
			return 0;
	}

Seguimos:
11. Crear un método en la clase cliente que concatene el valor de los atributos diaNacimiento, mesNacimiento y anioNacimiento y retorne
la fecha completa de nacimiento (Por ej,: 10/2/1980)

Este método es tan sencillo como esto:
1
2
3
4
public String getFechaNacimiento() {
		return diaNacimiento  + "/" + mesNacimiento +
				"/" + anioNacimiento;
	}

Siguiente:
12. Desplegar por pantalla los datos del Administrador, de la siguiente forma
■ Los datos del Administrador son:
<id+nombres+edad+direcion+sexo+cargo+cantEmpleados>
■ Para el atributo sexo desplegar la cadena correspondiente.
■ Para el atributo cargo desplegar la cadena correspondiente.

No nos dan más indicaciones, así que puede resolverte tal y como tú lo ha hecho. Sería totalmente correcto.
Sin embargo, lo habitual es que sea la propia clase quien ofrezca una forma rápida de obtener un String desplegando todos los valores de los atributos.
Y lo habitual, es que esto lo hagamos sobreescribiendo el método toString()

Este método llamado toString(), es un método que TODAS las clases de Java heredan de la clase Object (es algo así como la madre suprema de todas las clases)
Al sobreescribirlo, podemos decirle cómo nos gustaría construir una cadena String con los datos a mostrar.

Así que, a la clase Persona podemos darle un método toString(), donde comience a construir la cadena con sus atributos:

1
2
3
4
5
6
7
8
9
10
11
@Override
	public String toString() {
		String cadena = "<";
		cadena += id + " ";
		cadena += nombres + " ";
		cadena += edad + " ";
		cadena += direccion + " ";
		cadena += devolverSexo() + " ";
 
		return cadena;
	}

Y luego, a la clase Administrador, sobreescribiremos este método para que retome la cadena fabricada por Persona, y la complete con sus propios atributos.
1
2
3
4
5
6
7
8
9
@Override
	public String toString() {
		String cadena = super.toString(); //Retomamos la cadena construida por Persona
		//Completamos con los datos de Administrador
		cadena += cargo=='G'?"GERENTE GENERAL ":"JEFE DE RECURSOS HUMANOS ";
		cadena += cantEmpleados + ">"; //Cadena finalizada
 
		return cadena;
	}

Con esto, ahora en la clase Principal podemos desplegar los datos del administrador, con una sola línea
La última línea que marco en negrita:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public static void main(String [] args){
		Administrador administrador1 = new Administrador(1,"Juan Perez",
				35, "Avenida Mariscal Lopez", 'M');
		administrador1.cargarcantEmpleado(100);
		administrador1.cargarCargo('G');
 
		//Creamos empleados, sus ID son el último + 1
		Empleado empleado1 = new Empleado(administrador1.getId() + 1, "Jose Luis",
				18, "Carlos Antonio Lopez", 'M');
		empleado1.setporHora(true);
		empleado1.setSalario(100000);
 
		Empleado empleado2 = new Empleado(empleado1.getId() + 1, "Fernando Carlos",
				21, "Independencia Nacional", 'M');
		empleado2.setporHora(false);
		empleado2.setSalario(1600000);
 
		//Creamos Clientes
		Cliente cliente1 = new Cliente(715, "Ada Luz",
				20, "Avenida España", 'F');
		cliente1.setdiaNacimiento(10);
		cliente1.setmesNacimiento(2);
		cliente1.setanioNacimiento(1980);
 
		Cliente cliente2 = new Cliente(700, "Carlos Jose",
				23, "25 proyectadas", 'M');
		cliente2.setdiaNacimiento(20);
		cliente2.setmesNacimiento(4);
		cliente2.setanioNacimiento(1983);
 
		//Desplegamos datos del administrador
		System.out.println("Datos del Administrador:");
		System.out.println(administrador1);
	}

Como ahora la clase Administrador posee un método toString(), basta con ponerlo dentro de un System.out y automáticamente mostrará en pantalla la cadena que hemos creado usando dicho método.

En pantalla, podremos ver como se despliegan todos los datos:
1
2
Datos del Administrador:
<1 Juan Perez 35 Avenida Mariscal Lopez MASCULINO GERENTE GENERAL 100>

Siguiente punto:
13. Desplegar por pantalla los datos de los Empleados, de la siguiente forma
■ Empleado 1: <id+nombres+edad+direccion+sexo+porHora+salario>
■ Empleado 2: <id+nombres+edad+direccion+sexo+porHora+salario>
■ Para el atributo sexo desplegar la cadena correspondiete.
■ Para el atributo salario desplegar el salario en base al cálculo realizado en el punto 10(para el empleado por hora)

Pues lo mismo.
A la clase Empleado le damos un método toString(), que recoja la cadena comenzada por su clase madre Persona y la complete.
En este caso, tenemos que ver que el salario se indicará para los empleados "por hora", por lo que la cadena será distinta según el caso:
1
2
3
4
5
6
7
8
9
10
11
12
@Override
	public String toString() {
		String cadena = super.toString();
		cadena += horario() + " ";
		//Solo mostramos salario calculado, si es "por hora
		if (porHora)
			cadena += calcularsalario() + ">";
		else //Cadena termina sin mostrar ningún salario
			cadena += ">";
 
		return cadena;
	}

Y en Principal, de nuevo podemos mostrar ambos Empleados con solo un par de líneas:
1
2
3
4
		//Datos empleados
		System.out.println("\nDatos de los Empleados:");
		System.out.println("Empleado 1: " + empleado1);
		System.out.println("Empleado 2: " + empleado2);

En pantalla, todo OK:
1
2
3
4
5
6
Datos del Administrador:
<1 Juan Perez 35 Avenida Mariscal Lopez MASCULINO GERENTE GENERAL 100>
 
Datos de los Empleados:
Empleado 1: <2 Jose Luis 18 Carlos Antonio Lopez MASCULINO POR HORA 4000000>
Empleado 2: <3 Fernando Carlos 21 Independencia Nacional MASCULINO MENSUALERO >

Ya por último:
14. Desplegar por pantalla los datos de los Clientes, de la siguiente forma
■ Cliente 1:
id+nombres+edad+direccion+sexo+fecha de nacimiento>. La fecha de nacimiento se debe desplegar de la siguiente forma: 10/2/1980.
■ Cliente 2:
<id+nombres+edad+direccion+sexo+fecha de nacimiento>. La fecha de nacimiento debe desplegar de la siguiente forma:20/4/1983
■ Para el atributo sexo desplegar la cadena correspondiente

Bien, no es necesario dar más explicaciones. Es repetir la misma lógica que hemos seguid con las anteriores clases.

Un método toString() para la clase Cliente:
1
2
3
4
5
6
7
@Override
	public String toString() {
		String cadena = super.toString();
		cadena += getFechaNacimiento() + ">";
 
		return cadena;
	}

En Principal desplegamos los datos de los Clientes:
1
2
3
4
		//Datos clientes
		System.out.println("\nDatos de los Clientes:");
		System.out.println("Cliente 1: " + cliente1);
		System.out.println("Cliente 2: " + cliente2);

Todo bien en pantalla:
1
2
3
4
5
6
7
8
9
10
Datos del Administrador:
<1 Juan Perez 35 Avenida Mariscal Lopez MASCULINO GERENTE GENERAL 100>
 
Datos de los Empleados:
Empleado 1: <2 Jose Luis 18 Carlos Antonio Lopez MASCULINO POR HORA 4000000>
Empleado 2: <3 Fernando Carlos 21 Independencia Nacional MASCULINO MENSUALERO >
 
Datos de los Clientes:
Cliente 1: <715 Ada Luz 20 Avenida España FEMENINO 10/2/1980>
Cliente 2: <700 Carlos Jose 23 25 proyectadas MASCULINO 20/4/1983>


Y con esto creo que queda completado el ejercicio.

He intentado explicar todo lo mejor posible, sin embargo, no dudes en volver a preguntar lo que no te haya quedado claro, o comentar lo que creas que es incorrecto, o cualquier cosa.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda JAVA Código

Publicado por Juan (24 intervenciones) el 11/09/2021 00:31:50
Muchas gracias por su ayuda. Sinceramente es muy útil su ayuda.Lastimosamente me indica error en la clase Empleado en el método calcularsalario. Nose como resolver. Vuelvo a repetir. Muchas Gracias por su solidaridad.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public int calcularsalario(){
 
		if (porHora==true){
 
			return 40*salario;
 
		}
 
		else
 
			return 0;
 
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar