Leer matrices no regulares
Ya era lo único que me faltaba por preguntar... Leer una matriz no regular. He pensado en indicar las dimensiones al principio del archivo como me recomendaste, no hay ningún problema. Te dejo el que habías hecho para regulares, porque seguro que algo sirve...
Muchísimas gracias!
import java.io.*;
import java.util.StringTokenizer;
public class Leer {
public static void main(String[] args) {
if (args.length == 1)
printm(porLineas(args[0]));
}
public static void printm(Object[][] mat) {
for (int i = 0; i < mat.length; ++i) {
for (int j = 0; j < mat.length; ++j)
System.out.print(mat[j] + " ");
System.out.println();
}
}
public static Object[][] porLineas(String ruta) {
try {
FileReader arch = new FileReader(ruta); // Lector de archivo
BufferedReader buff = new BufferedReader(arch); // Buffer de lectura
// Calcular el orden de la matriz y reservar espacio
String linea = buff.readLine();
StringTokenizer st = new StringTokenizer(linea);
int orden = st.countTokens();
Object[][] mat = new Object[orden][orden];
// Rellenar la matriz
for (int i = 0; i < orden; ++i) {
for (int j = 0; j < orden; ++j)
mat[j] = st.nextToken();
/* La primera linea ya fue leída (para calcular las dimensiones),
así que ahora solo hay que leer las n - 1 siguientes. */
if (i < orden - 1) {
linea = buff.readLine();
st = new StringTokenizer(linea);
}
}
// Mostrar datos sobre la matriz
System.out.println("Matriz de orden " + orden);
// Otros datos
// Cerrar los flujos de entrada
buff.close();
arch.close();
// Salir
return mat;
}
catch (IOException ioe) {
System.out.println(ioe);
return null;
}
}
}
Muchísimas gracias!
import java.io.*;
import java.util.StringTokenizer;
public class Leer {
public static void main(String[] args) {
if (args.length == 1)
printm(porLineas(args[0]));
}
public static void printm(Object[][] mat) {
for (int i = 0; i < mat.length; ++i) {
for (int j = 0; j < mat.length; ++j)
System.out.print(mat[j] + " ");
System.out.println();
}
}
public static Object[][] porLineas(String ruta) {
try {
FileReader arch = new FileReader(ruta); // Lector de archivo
BufferedReader buff = new BufferedReader(arch); // Buffer de lectura
// Calcular el orden de la matriz y reservar espacio
String linea = buff.readLine();
StringTokenizer st = new StringTokenizer(linea);
int orden = st.countTokens();
Object[][] mat = new Object[orden][orden];
// Rellenar la matriz
for (int i = 0; i < orden; ++i) {
for (int j = 0; j < orden; ++j)
mat[j] = st.nextToken();
/* La primera linea ya fue leída (para calcular las dimensiones),
así que ahora solo hay que leer las n - 1 siguientes. */
if (i < orden - 1) {
linea = buff.readLine();
st = new StringTokenizer(linea);
}
}
// Mostrar datos sobre la matriz
System.out.println("Matriz de orden " + orden);
// Otros datos
// Cerrar los flujos de entrada
buff.close();
arch.close();
// Salir
return mat;
}
catch (IOException ioe) {
System.out.println(ioe);
return null;
}
}
}
Respuesta
1