[Ayuda] Problema con Array Bidimensional

Iniciado por heidozanzo, 7 Noviembre 2015, 19:54 PM

0 Miembros y 1 Visitante están viendo este tema.

heidozanzo

Buenas después de estar mucho tiempo buscando el problema ,así que decante por crear un tema   :D :D.


Tengo una consulta/problema con un arreglo bidimensional ,este mismo tiene 5 notas de n cantidad de alumnos ingresadas ,al momento de pedir el alumno con mayor nota (Osea el nombre y la nota) no tengo problema me lo muestra sin complicaciones pero al mostrar el mínimo me muestra la mínima nota bien pero el nombre del alumno me lo muestra null



Código (java) [Seleccionar]
 
       mayor  = menor= not1[0][0];//se toma el primero como mayor y menor
 
       
       for (f = 0; f < nombres.length; f++) {  //
           for (a = 0; a < not1[f].length; a++) {
               if (not1[f][a] > mayor) {
                   mayor = not1[f][a];
                   nombreMayor = nombres[f];
               } else if (not1[f][a] < menor) {
                   menor = not1[f][a];
                   nombreMenor = nombres[f];
               }
           }          
       }
       System.out.println("Mayor nota de la clase del alumno  "+nombreMayor+ "  " + mayor);
 
       System.out.println("Menor nota de la clase del alumno  "+nombreMenor+ " " + menor);
 
   }


para orientarse un poco:
Código (java) [Seleccionar]
 int nualumn=0 //es el numeros de alumnos ingresados
public static String[] nombres; //donde ingreso los nombres
public static int [][] not1;     //el array bidimensional para las 5 notas
public static String nombreMenor ; //este es el del problema
public static String nombreMayor ;  //String para almacenar el nombre mayor
int a=0
int f=0  


se que aca no se hace la tarea de nadie ,solo estoy preguntando si como lo formule esta mal puesto o es algun error tonto no pido que me lo resuelvan   :P :P,solo una ayuda que ya me esta desquiciando
si falto algun dato estare pendiente al tema y lo agregare ,y si no cumpli con alguna norma ,soy nuevo  :xD :xD y si las lei pero si se me paso alguna sepan perdonar :P .

0xFer

mayor y menor debería empezar a 0, porque si la primera nota resulta ser la menor o la mayor entonces núnca se ejecutarán nombreMayor = nombres[f]; y nombreMenor = nombres[f];
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

heidozanzo

Disculpa mi ignorancia pero en que parte el mayor   y menor deberian empezar en cero? las variables las tengo inicializadas en 0
Código (java) [Seleccionar]
mayor=0
menor=0
pero no creo que te refieras a eso.

0xFer

Código (java) [Seleccionar]
mayor  = menor= not1[0][0];//se toma el primero como mayor y menor

Inician con los valores de las primeras notas, sólo tendrías que quitar esa linea.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

heidozanzo

  Aca hay un imagen de lo que sucede ,elimine la linea que me dijiste y sigue pasando lo mismo solo que aparece null 0 ahora en vez de null y el minimo ,ahi en la imagen aparece la linea que me dijiste pero la puse despues de ejecutar para ver algo. no se si se puede postear la imagen directamente o tengo que poner slo el link cualquier cosa despues lo edito

0xFer

Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

heidozanzo



Genial funciona lo del nombre por lo menos no me muestra null ,lo unico malo es que ahora solo me toma el mayor y menor de el ultimo ingresado.
Gracias 0xFer por ayudarme con lo del nombre  :D :D

0xFer

Te podemos ayudar más rápido si pegas todo el código, pero utiliza la etiqueta Geshi.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

heidozanzo

Código (java) [Seleccionar]
import java.util.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class Finalv1 {


    public static void main(String[] args)
    {
        int intentos = 0,op = 0;
        Scanner teclado = new Scanner(System.in);
        String usuarioCorrecto = "admin";
        String usuarioIngresado = "";
        String contraseñaCorrecta = "123";
        String contraseñaIngresada = "";

       
        do
        {
        System.out.println("Bienvenido a Gestion de Alumnos 1.0 ");
        System.out.println("Ingrese Usuario: ");
            usuarioIngresado = input.next();
            System.out.println("Ingrese Contraseña: ");
            contraseñaIngresada = input.next();
            if (usuarioIngresado.equals(usuarioCorrecto) == false || contraseñaIngresada.equals(contraseñaCorrecta) == false || ((intentos <= 3)))
            {
            intentos++; // contador para los intentos
            if (usuarioIngresado.equals(usuarioCorrecto)  && contraseñaIngresada.equals(contraseñaCorrecta))
                {
            System.out.println("Datos ingresados correctos");
                   
                }
            else if (intentos < 3)/* Aca que se repitiera siempre y cuando los intentos sean menores  a 3*/
            {
            System.out  .println("Error! usuario o contraseña incorrecta");
            }
            else
            {
            // Y aca te manda el ultimatum si te equivocas 3 veces
            System.out.println("Contacte con el soporte tecnico.");
            System.exit(0);
            }
           
            }
        while (usuarioIngresado.equals(usuarioCorrecto) == false || contraseñaIngresada.equals(contraseñaCorrecta) == false);
        do{   
       
        try{
        System.out.print("\n\nMenú principal \n\n1: Ingresar información \n\n2: Grafica \n\n3: Datos de los Alumnos  \n\n4: Finalizar programa");
        System.out.println("\nSeleccione una opción del menú");
        op=input.nextInt();
        }catch(Exception e){
        System.out.println("Error! ingrese una opción válida del menú");
        input.nextLine();
        }
        switch (op){
        case 1: ingreseDatos();
        break;
        case 2:
        try{
        grafica();
        }catch(NullPointerException e){
        System.out.println("Error todavia no se ha ingresado ningun dato Presione Cualquier tecla para volver");
input.nextLine();
}finally{
break;}
case 3:
try{
mostrarDatos();
}catch(NullPointerException e){
System.out.println("Error todavia no se ha ingresado ningun dato Presione Cualquier tecla para volver");
input.nextLine();
}finally{
break;}
case 4:
System.out.println("Fin del programa");
break;
default:
System.out.println("Error! ingrese una opción válida del menú");
}
        }while (op!=4 );
        }

    public static Scanner input = new Scanner(System.in);
    public static String[] nombres;
    public static String nombreMayor;
    public static String nombreMenor;
    public static int[][] not1;
    public static int a = 0, f = 0, pos = 0, sumaPos = 0, r = 0, suma = 0, PromedioTMP = 0,nualumn = 0, mayor=-1, menor=101,promedioAlumn,promedioGral,sumaProm,promFin,cont1=0,cont2=0,cont3=0,cont4=0;
   
    public static void ingreseDatos()
    {
    try{
    System.out.println("Cantidad de alumnos en el grupo: ");
    nualumn = input.nextInt();     
    }catch(Exception e){
    input.nextLine();
    System.out.println("Error Numero invalido regresando al menu");     
    }
    nombres = new String[nualumn];
    not1 = new int[nualumn][5];
    for (f = 0; f < nombres.length; f++)
    {
    System.out.println("Ingrese nombre del alumno ");
    nombres[f] = input.next();

    for (a = 0; a < 5; a++)
    {
    while ( not1[f][a]   < 1 ||  not1[f][a]   > 12)
    {
    try{
    System.out.println("Introduzca nota "+(a+1));
    not1[f][a]   = input.nextInt();
    }catch(InputMismatchException e){
                        input.nextLine();
                        System.out.println("Error ingrese un numero valido");
                        }
    }
    }
    }
    }
   
 
   
    private static void grafica() {
    DefaultPieDataset dataset = new DefaultPieDataset();
    dataset.setValue("Aprobados", cont1);
    dataset.setValue("Desaprobados", cont2);
    JFreeChart grafica = ChartFactory.createPieChart3D(
    "Grafica de Aprobados y Desaprobados", // El nombre de la gráfica
    dataset, // El arreglo de datos
    false, // Indica si lleva leyenda
    true, // Indica si lleva tooltips
    false); // Indica si son URls
       // Mostramos la grafica en pantalla
    ChartFrame frame = new ChartFrame("Graficador", grafica);
        frame.pack();
    frame.setVisible(true);
   
    }

    // Opcion 3 de la lista
   
    private static void mostrarDatos(){
       
       
    for (f = 0; f < nombres.length; f++)
    {
    System.out.println("Alumno: " + nombres[f]);
    for (a = 0; a < 5; a++)
    {
    System.out.println("Notas " + not1[f][a]);
    }   
    }
    for (f = 0; f < nombres.length; f++)
    {   
    PromedioTMP = 0;
    // Ciclo para recorrer las columnas
    for (a = 0; a < 5; a++)
    {   
    PromedioTMP = PromedioTMP + not1[f][a];
    }
    promedioAlumn=PromedioTMP/5;
    for( int i=0; i<nualumn; i++ ){
    sumaProm+= promedioAlumn;
    }
    promFin=((sumaProm/nualumn)/nualumn);
   
    System.out.println("Promedio del alumno " + nombres[f] + ": "+ promedioAlumn);
   
    if(promedioAlumn>=7){
    cont1 = cont1 + 1;
    System.out.println("Aprobado");
    }
    else{
    System.out.println("Reprobado");
            cont2=cont2+1;
            }
    if(promedioAlumn>=3||promedioAlumn<7){
    cont3 = cont3 + 1;
   
    }
    else if(promedioAlumn < 3){
            cont4=cont4+1;
            }
    }

   
   
   
        for (f = 0; f < nombres.length; f++) {  //
            for (a = 0; a < not1[f].length; a++) {
                if (not1[f][a] > mayor) {
                    mayor = not1[f][a];
                    nombreMayor = nombres[f];
                } else if (not1[f][a] < menor) {
                    menor = not1[f][a];
                    nombreMenor = nombres[f];
                }
            }           
        }
   
    System.out.println("Mayor nota ingresada de la clase del alumno "+ nombreMayor + " " + mayor);
    System.out.println("Menor nota ingresada de la clase del alumno "+ nombreMenor + " " + menor);
    System.out.println("Promedio General de la Clase :  "+promFin);
    }
    }
   


Aca esta el codigo ,lo unico que use librerias de JfreeChart para unas graficas.

0xFer

También debes crear dos arreglos para guardar las notas mayores y menores de cada alumno:

Código (java) [Seleccionar]

int[] mayor = new int[nombres.length];
int[] menor = new int[ nombres.length];

for (f = 0; f < nombres.length; f++) {  //
           for (a = 0; a < not1[f].length; a++) {
               if (not1[f][a] > mayor) {
                   mayor[f] = not1[f][a];
                   nombreMayor = nombres[f];
               } else if (not1[f][a] < menor) {
                   menor[f] = not1[f][a];
                   nombreMenor = nombres[f];
               }
           }         
       }


así puedes saber las notas mayores y menores de los alumnos
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}