Llenar matriz con datos de txt y ordenarlos por quicksor

Como dice el titulo debo de hacer un programa en java que lea datos de un archivo txt y colocar su información en una matriz, la información del txt es el numero de control, nombre y calificación, todo esta separado por comas, esto es lo que llevo de codigo, solo que me marca un error al compilarlo, el error esta en la matriz este es el erro que me marca Exception in thread "main" java. Lang. NullPointerException

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import static java.lang.Math.round;
import java.util.ArrayList;
public class Unidad5ordenamiento
{
String [] lp;
String [][] matriz;

public void cargar()
{
try
{
File archivo;
FileReader lddc;
archivo = new File("ruta del archivo");
lddc = new FileReader(archivo);
BufferedReader simili = new BufferedReader(lddc);
String linea = simili.readLine();
lp = linea.split(",");
int i=0;
while((linea = simili.readLine())!=null)
{
lp = linea.split(",");
matriz[i][0]= lp[0];
matriz[i][1]= lp[1];
matriz[i][2]= lp[2];
i++;
}
}
catch(IOException x)
{
System.err.format("IOException: %s%n", x);
}
}
public void imprimir ()
{
int f = 0;
int c = 0;
for (f=0; f<matriz.length;f++)
{
for (c=0;c<3;c++)
{
System.out.print(matriz[f][c]+ " ");
}
System.out.println();
}
}
public ArrayList <archivo> Quicksort(ArrayList <archivo> lap, int primero, int ultimo)
{
int i, j, central;
archivo pivote = new archivo ("0","","0");
archivo t = new archivo ("0","","0");
central = (primero + ultimo)/2;
pivote = lap.get(round(central));
i = primero;
j = ultimo;
do
{
while (Integer.valueOf(lap.get(i).getControl())>Integer.valueOf(lap.get(i).getCalificacion()))
while (Integer.valueOf(lap.get(j).getControl())<Integer.valueOf(lap.get(j).getCalificacion()))
if (i<=j)
{
t = lap.get(i);
lap.set(i, lap.get(j));
lap.set(j, t);
i++;
j--;
}
}
while (i<=j);
if (primero<j)
{
lap = Quicksort(lap, primero, j);
}
if (i<ultimo)
{
lap = Quicksort(lap, i, ultimo);
}
return lap;
}
public void QuickSort()
{
ArrayList <archivo> lap = new ArrayList();
for (int i = 0; i<lap.size();i++)
{
lap.add(new archivo("0","","0"));
}
long tiempo = System.nanoTime();
//lap = Quicksort(lap,0,);
}
public static void main(String[] args)
{
Unidad5ordenamiento alumno = new Unidad5ordenamiento();
alumno.cargar();
alumno.imprimir();
}
}

Respuesta
1

Yo respondí una pregunta así hace un tiempo, tenía algunos errores su algoritmo original así que tuve que corregir. Aquí está mi respuesta. Trata de usar el "insertar código fuente" en la barra de edición de todoexpertos para que el código no sea todo plano. Así ahorra facilitas la forma de ayudarte. Revisaré tu código a ver que ocurre.

Gracias, el error era en que al declarar la matriz no estaba definiendo la bien, pero ya se soluciono, una pregunta me podrías ayudar para hacer el ordenamiento por quicksort de la matriz, esto es lo que llevo de código de como creo yo que es para el ordenamiento (todos los campos son string), te lo agradeceré mucho

public ArrayList <archivo> Quicksort(ArrayList <archivo> lap, int primero, int ultimo)
    {
        int i, j, central;
        archivo pivote = new archivo ("0","","0");
        archivo t = new archivo ("0","","0");
        central = (primero + ultimo)/2;
        pivote = lap.get(round(central));
        i = primero;
        j = ultimo;
        do
        {
            while (Integer.valueOf(lap.get(i).getControl())>Integer.valueOf(lap.get(i).getControl()))i++;
                while (Integer.valueOf(lap.get(j).getControl())<Integer.valueOf(lap.get(j).getControl()))j--;
                    if (i<=j)
                    {
                        t = lap.get(i);
                        lap.set(i, lap.get(j));
                        lap.set(j, t);
                        i++;
                        j--;
                    }
        }
        while (i<=j);
        if (primero<j)
        {
            lap = Quicksort(lap, primero, j);
        }
        if (i<ultimo)
        {
            lap = Quicksort(lap, i, ultimo);
        }
        return lap;
    }
    public void QuickSort()
    {
        ArrayList <archivo> lap = new ArrayList();
        for (int i = 0; i<lap.size()-1;i++)
        {
            for (int j=i+1;j<=lap.size()-1;j++)
            {
                lap.add(new archivo("0","","0"));
            }
        }
        long tiempo = System.nanoTime()- tiempoini;
        double seg = (double)tiempotot/1000000000.0;
        System.out.println("Tiempo total: ");
        return lap;
       // lap = Quicksort(lap,0,lap-1);
    }
public class archivo 
{
    private final int ctrl;
    private final String nombre;
    private final double calificacion;
    archivo(String cr, String nom, String cal)
    {
        this.ctrl = Integer.valueOf(cr);
        this.nombre = nom;
        this.calificacion = Double.valueOf(cal);
    }
    public String getControl ()
    {
        return String.valueOf(this.ctrl);
    }
    public String getNombre()
    {
        return this.nombre;
    }
    public String getCalificacion ()
    {
        return String.valueOf(calificacion);
    }
}

Disculpa por no responder, andaba o ando en finales. No recuerdo como se hacía ese algoritmo de ordenamiento, aunque espero que ya lo hayas solucionado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas