Análisis Estadístico de Compañías Telefónicas en Java
Análisis Estadístico de Telefonía Móvil en Java
El siguiente programa implementa la lectura de datos mediante consola para clasificar usuarios según su compañía telefónica (Movistar, Orange u Otros) y su modalidad de pago (Tarjeta o Contrato), calculando la cuota mayoritaria al finalizar el ingreso de datos.
Código Fuente del Ejercicio
package ejercicio24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Ejercicio24 {
public static void main(String[] args) throws IOException {
String miTipo, miCompañia;
int contadorTotal = 0, totMov = 0, totOr = 0, totOt = 0;
int movTar = 0, movCon = 0, oraTar = 0, oraCon = 0, otTar = 0, otCon = 0;
float porGanador = 0;
Ejercicio24 objeto = new Ejercicio24();
miCompañia = objeto.pedirCompañia();
while (!miCompañia.equalsIgnoreCase("*")) {
miTipo = objeto.pedirTipo();
contadorTotal++;
if (miTipo.equalsIgnoreCase("Tarjeta")) {
if (miCompañia.equalsIgnoreCase("Movistar")) {
totMov++;
movTar++;
} else if (miCompañia.equalsIgnoreCase("Orange")) {
totOr++;
oraTar++;
} else {
totOt++;
otTar++;
}
} else {
if (miCompañia.equalsIgnoreCase("Movistar")) {
totMov++;
movCon++;
} else if (miCompañia.equalsIgnoreCase("Orange")) {
totOr++;
oraCon++;
} else {
totOt++;
otCon++;
}
}
miCompañia = objeto.pedirCompañia();
}
if (contadorTotal == 0) {
System.out.println("No se han introducido datos.");
} else {
totMov = movTar + movCon;
totOr = oraTar + oraCon;
totOt = otTar + otCon;
if (totMov > totOr && totMov > totOt) {
System.out.println("Movistar gana");
porGanador = (float) totMov / contadorTotal * 100;
System.out.println("Con un " + porGanador + "%");
} else if (totOr > totMov && totOr > totOt) {
System.out.println("Orange gana");
porGanador = (float) totOr / contadorTotal * 100;
System.out.println("Con un " + porGanador + "%");
} else if (totOt > totMov && totOt > totOr) {
System.out.println("Otros gana");
porGanador = (float) totOt / contadorTotal * 100;
System.out.println("Con un " + porGanador + "%");
} else {
System.out.println("Son iguales");
}
} // Cierre de bloques condicionales anidados (4 llaves más)
}
public String pedirTipo() throws IOException {
InputStreamReader flujo = new InputStreamReader(System.in);
BufferedReader teclado = new BufferedReader(flujo);
String tipo;
System.out.print("Tarjeta o Contrato: ");
tipo = teclado.readLine();
while (tipo.compareToIgnoreCase("Tarjeta") != 0 && tipo.compareToIgnoreCase("Contrato") != 0) {
System.out.print("Error, vuelve a introducir el tipo: ");
tipo = teclado.readLine();
}
return tipo;
}
public String pedirCompañia() throws IOException {
InputStreamReader flujo = new InputStreamReader(System.in);
BufferedReader teclado = new BufferedReader(flujo);
String compañia;
System.out.print("Introduce Compañía: ");
compañia = teclado.readLine();
return compañia;
}
}Estructura del Algoritmo
- Entrada de datos: Se utiliza
BufferedReadereInputStreamReaderpara procesar la entrada estándar de teclado. - Bucle de control: La captura finaliza al ingresar el carácter centinela
*. - Validación: El método
pedirTipo()valida estrictamente que el valor sea Tarjeta o Contrato. - Cálculo final: Determina la operadora con mayor volumen y muestra el porcentaje representativo sobre el total acumulado.