Crear una lista simple la cual debe ingresar números reales, luego ordenarlos de mayor a menor, imprimir la lista, obtener el promedio de los valores de cada lista, comprobar cuál es el valor que más se repite en la lista.
Explicación: Se desarrollaran tres clases una clase Nodo, una Lista y una principal, los nodos deben ser simplemente enlazados dado los requerimientos del usuario. También se puede notar que los nodos deben poseer una variable float en base al problema, el ordenamiento se realizara mediante un método de ordenamiento de los ingresos, la impresión mediante un ciclo repetitivo basado en el tamaño dinámico de la lista, el resto de funciones harán uso de un ciclo similar para su desarrollo con ajustes en base a lo necesitado.
Clase Nodo: Nodos simplemente enlazados
public class Nodo {
private Nodo siguiente;//Lista simplemente enlazada
private float info;
public Nodo(float info,Nodo siguiente){
this.info=info;
this.siguiente=siguiente;
}
public Nodo(float info){
this.info=info;
siguiente=null;
}
public Nodo getSiguiente() {
return siguiente;
}
public void setSiguiente(Nodo siguiente) {
this.siguiente = siguiente;
}
public float getInfo() {
return info;
}
public void setInfo(int info) {
this.info = info;
}
}
Clase lista:
public class Lista {
private Nodo inicio;
private Nodo fin;
public Lista(){
inicio=fin=null;
}
public void imprimirLista(){ //Función que imprime la lista desde su inicio hasta el fin
Nodo aux=inicio;
int cont=1;
while(aux!=null){// Ciclo de repetición que pasa la lista desde inicio a fin
System.out.println(cont+" "+aux.getInfo());
cont++;//Contador tipo entero para la lista
aux=aux.getSiguiente();
}
}
public float promedioLista(){ //Función que calcula el prommedio de la lista
Nodo aux=inicio;
float cont=0;//auxiliar en donde se guardara el valor de cada Nodo
int total=0;//auxiliar en donde se guardara el total de Nodos en la Lista
while(aux!=null){// Ciclo de repetición que pasa la lista desde inicio a fin
cont=cont+aux.getInfo();
total++;
aux=aux.getSiguiente();
}
return cont/total;
}
public float contador(){//Metodo que cuenta el valor que mas se repite en la lista
Nodo aux=inicio;
int contMay=0,contOtro=0;
float mayor=0,otro=0;
if(aux!=null){//comprueba que la lista no este vacia para hacer referencia a la información del nodo inicio
otro=aux.getInfo();
while(aux!=null){
if(otro==aux.getInfo()){//Si el valor es igual al anterior se mantiene contando
contOtro++;
}else{
if(contMay<=contOtro){//Al variar el valor se hace el cambio de variable en base a si este contador fue mayor al anterior
mayor=otro;
contMay=contOtro;
contOtro=1;//Se inicia en uno, debido a que el valor se calcula en una sentencia anterior
otro=aux.getInfo();
}else{
otro=aux.getInfo();
contOtro=1;
}
}
aux=aux.getSiguiente();
}
}
if(contMay<contOtro){//Se comprueba al final para determinar si el valor enviado es el correcto
return otro;
}
return mayor;
}
public void agregarNodoOrdenado(float info){//Ordena la lista, ingresando cada nuevo Nodo en un posición en base a su valor
Nodo ingreso= new Nodo(info);
if(inicio==null){//si la lista esta vacia
inicio=fin=ingreso;
ingreso.setSiguiente(null);
}else{
if(inicio.getInfo()<=ingreso.getInfo()){//si es menor o igual el valor nuevo al inicio
ingreso.setSiguiente(inicio);
inicio=ingreso;
}else{
if(fin.getInfo()>=ingreso.getInfo()){//Si es menor que el final de la Lista
fin.setSiguiente(ingreso);
fin=ingreso;
}else{
Nodo aux=inicio;
Nodo aux2=inicio.getSiguiente();
while(aux2!=null){//Determina el siguiente valor mas pequeño, va alterando en medio de la lista
if(aux2.getInfo()<ingreso.getInfo()){
break;
}
aux=aux2;
aux2=aux2.getSiguiente();
}
if(aux2.getInfo()<ingreso.getInfo()&&aux2!=null){//Realiza la asignacion del valor obtenido
aux.setSiguiente(ingreso);
ingreso.setSiguiente(aux2);
}
}
}
}
}
}
Clase principal:
import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Lista l=new Lista();
int menu=0;
do{
menu=leerInt("----Menu----"
+ "\n1.Ingresar valor a la tabla"
+ "\n2.Imprimir Lista"
+ "\n3.Calcular promedio"
+ "\n4.Contar mayor numero repetido"
+ "\n0.Salir");
switch(menu){
case 1:{
l.agregarNodoOrdenado(leerFloat("Ingrese el valor del nodo"));
break;
}
case 2:{
l.imprimirLista();
break;
}
case 3:{
System.out.println("El promedio de la lista es de "+l.promedioLista());
break;
}
case 4:{
System.out.println("El valor que mas se repite en la base de datos es: "+l.contador());
break;
}
case 0:{
System.out.println("Programa Terminado");
break;
}
}
}while(menu!=0);
}
public static int leerInt(String texto){
Scanner leer=new Scanner(System.in);
System.out.println(texto);
return leer.nextInt();
}
public static float leerFloat(String texto){
Scanner leer=new Scanner(System.in);
System.out.println(texto);
return leer.nextFloat();
}
}
No hay comentarios.:
Publicar un comentario