Por si sirve de más ayuda....
Primero se necesita una clase "madre", ya que habrán dos clases de Encuestas, pero se han poder guardar juntas en un mismo vector.
Para ello, es necesario poder instanciarlas bajo una misma clase común a ambas, una clase "madre".
Esta clase tendría los atributos comunes a ambas encuestas: edad y sexo.
Podemos declararla abstracta, no es necesario, pero como no vamos a querer instanciar objetos de esta clase "madre", si no de las clases "hijas", es buena costumbre declararla como abstracta.
public abstract class Encuesta {
protected int edad;
protected String sexo;
public Encuesta(int edad, String sexo) {
this.edad = edad;
this.sexo = sexo;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
}
La primera clase "hija" puede llamarse Encuesta1 y aporta los atributos propios de este tipo de encuesta.
Además, podemos darle un método estático que se encargue de mostrar las preguntas acordes a esta encuesta y recoger los datos para construir un objeto Encuesta1.
import java.util.Scanner;
public class Encuesta1 extends Encuesta {
private char escolaridad;
private String hoyNoCircula;
public Encuesta1(int edad, String sexo, char escolaridad, String hoyNoCircula) {
super(edad, sexo);
this.escolaridad = escolaridad;
this.hoyNoCircula = hoyNoCircula;
}
public char getEscolaridad() {
return escolaridad;
}
public void setEscolaridad(char escolaridad) {
this.escolaridad = escolaridad;
}
public String getHoyNoCircula() {
return hoyNoCircula;
}
public void setHoyNoCircula(String hoyNoCircula) {
this.hoyNoCircula = hoyNoCircula;
}
public static Encuesta1 hacerEncuesta1() {
Scanner teclado = new Scanner(System.in);
int edad = 0;
while (edad < 20 || edad > 45) {
System.out.print("Introduzca edad(20/55): ");
edad = Integer.parseInt(teclado.nextLine());
}
System.out.print("Introduzca sexo(Hombre/Mujer): ");
String sexo = teclado.nextLine();
System.out.println("Nivel de Escolaridad(P=Primaria, S=Secundaria, B=Bachillerato, L=Licenciatura");
System.out.print("Introduzca nivel: ");
char escolaridad = teclado.nextLine().toUpperCase().charAt(0);
System.out.println("¿A favor del movimiento \"Hoy no Circula\"?(Si/No): ");
String noCircula = teclado.nextLine();
return new Encuesta1(edad, sexo, escolaridad, noCircula);
}
}
Con la otra clase "hija", llamada Encuesta2, seguimos el mismo patrón.
import java.util.Scanner;
public class Encuesta2 extends Encuesta {
private boolean tieneAuto;
private int hoyNoCircula;
public Encuesta2(int edad, String sexo, boolean tieneAuto, int hoyNoCircula) {
super(edad, sexo);
this.tieneAuto = tieneAuto;
this.hoyNoCircula = hoyNoCircula;
}
public boolean tieneAuto() {
return tieneAuto;
}
public void setTieneAuto(boolean tieneAuto) {
this.tieneAuto = tieneAuto;
}
public int getHoyNoCircula() {
return hoyNoCircula;
}
public void setHoyNoCircula(int hoyNoCircula) {
this.hoyNoCircula = hoyNoCircula;
}
public static Encuesta2 hacerEncuesta2() {
Scanner teclado = new Scanner(System.in);
int edad = 0;
while (edad < 20 || edad > 45) {
System.out.print("Introduzca edad(20/55): ");
edad = Integer.parseInt(teclado.nextLine());
}
System.out.print("Introduzca sexo(Hombre/Mujer): ");
String sexo = teclado.nextLine();
System.out.print("¿Tiene auto?(Si/No): ");
boolean tieneAuto = teclado.nextLine().toLowerCase().equals("si");
int noCircula = 0;
while(noCircula < 1 || noCircula > 3) {
System.out.print("¿A favor del movimiento \"Hoy no Circula\"?(1=si/2=no/3=me es indiferente): ");
noCircula = Integer.parseInt(teclado.nextLine());
}
return new Encuesta2(edad, sexo, tieneAuto, noCircula);
}
}
Ya por último, una clase main donde declaramos un vector de clase Encuesta, que aceptará por igual objetos de Encuesta1 y Encuesta2.
El tamaño de este vector lo decide el usuario al comienzo, es decir, nos dirá cuántas encuestas como máximo se podrán realizar.
Con una variable int podemos controlar cuántas encuestas llevamos hechas en cada momento, para así saber donde se ha de guardar cada nueva encuesta y cuándo hay que parar de aceptar nuevas encuestas.
Se mostrará un menú con las 7 opciones y con un switch se llamará a distintos métodos, según la opción escogida.
Lo importante en este ejercicio, es saber distinguir los objetos según si son instancias de Encuesta1 o Encuesta2, teniendo en cuenta que van a estar guardados como Encuesta
import java.util.Scanner;
public class MenuEncuestas {
private static Encuesta[] encuestas;
private static int encuestasHechas = 0;
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.print("¿Máxima cantidad de encuestas?: ");
encuestas = new Encuesta[Integer.parseInt(teclado.nextLine())];
int opcion = 0;
while (opcion != 7) {
System.out.println("\n1. Agregar encuesta 1");
System.out.println("2. Agregar encuesta 2");
System.out.println("3. Mostrar cuantos votaron a favor del no circula");
System.out.println("4. Mostrar el total de encuestas tipo1 y tipo 2");
System.out.println("5. Mostrar el total de votantes mujeres en la encuesta tipo 2");
System.out.println("6. Mostrar cuantos hombres de la encuesta 2 les es indiferente");
System.out.println("7. Terminar");
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 1:
agregarEncuesta1();
break;
case 2:
agregarEncuesta2();
break;
case 3:
cuantosaFavor();
break;
case 4:
totalEncuestasPorTipo();
break;
case 5:
totalMujeresTipo2();
break;
case 6:
hombresTipo2Indiferentes();
break;
case 7:
System.out.println("\nFIN DE PROGRAMA");
break;
default:
System.out.println("\nOpción equivocada...");
}
}
teclado.close();
}
private static void agregarEncuesta1() {
if (encuestasHechas == encuestas.length)
System.out.println("\nNo se admiten más encuestas.");
else {
encuestas[encuestasHechas] = Encuesta1.hacerEncuesta1();
encuestasHechas++;
}
}
private static void agregarEncuesta2() {
if (encuestasHechas == encuestas.length)
System.out.println("\nNo se admiten más encuestas.");
else {
encuestas[encuestasHechas] = Encuesta2.hacerEncuesta2();
encuestasHechas++;
}
}
private static void cuantosaFavor() {
if (encuestasHechas == 0)
System.out.println("\nAún no se ha hecho ninguna encuesta.");
else {
int aFavor = 0;
for (int i = 0; i < encuestasHechas; i++) {
if (encuestas[i] instanceof Encuesta1) {
Encuesta1 encu1 = (Encuesta1) encuestas[i];
if (encu1.getHoyNoCircula().toLowerCase().equals("si"))
aFavor++;
}
else {
Encuesta2 encu2 = (Encuesta2) encuestas[i];
if (encu2.getHoyNoCircula() == 1)
aFavor++;
}
}
System.out.printf("\nDe %d encuestas realizadas, hay %d votos a favor del \"Hoy no Circula\"\n",
encuestasHechas, aFavor);
}
}
private static void totalEncuestasPorTipo() {
if (encuestasHechas == 0)
System.out.println("\nAún no se ha hecho ninguna encuesta.");
else {
int tipo1 = 0, tipo2 = 0;
for (int i = 0; i < encuestasHechas; i++) {
if (encuestas[i] instanceof Encuesta1)
tipo1++;
else
tipo2++;
}
System.out.println("\nTotal encuestas de Tipo 1: " + tipo1);
System.out.println("Total encuestas de Tipo 2: " + tipo2);
}
}
private static void totalMujeresTipo2() {
if (encuestasHechas == 0)
System.out.println("\nAún no se ha hecho ninguna encuesta.");
else {
int mujeres = 0;
for (int i = 0; i < encuestasHechas; i++) {
if (encuestas[i] instanceof Encuesta2) {
Encuesta2 encu2 = (Encuesta2) encuestas[i];
if (encu2.getSexo().toLowerCase().equals("mujer"))
mujeres++;
}
}
System.out.println("\nMujeres encuestadas en el tipo 2: " + mujeres);
}
}
private static void hombresTipo2Indiferentes() {
if (encuestasHechas == 0)
System.out.println("\nAún no se ha hecho ninguna encuesta.");
else {
int hombres = 0;
for (int i = 0; i < encuestasHechas; i++) {
if (encuestas[i] instanceof Encuesta2) {
Encuesta2 encu2 = (Encuesta2) encuestas[i];
if (encu2.getHoyNoCircula() == 3)
hombres++;
}
}
System.out.println("\nHombres indiferentes en el tipo 2: " + hombres);
}
}
}