Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich verzweifele hier gerade daran, eine Matrix aus einem Textfile auszulesen. Das einlesen und übersetzen in einen inputstream ist mir bereits gelungen, allerdings komme ich jetzt nicht damit weiter, die einzelnen elemente in ein array zu speichern. zunächst muss ich das array bereitstellen, die zahl der zeilen habe ich ja schon, mit der anzahl der token würde ich dann ja auch auf die anzahl der spalten kommen, aber diese counttokens() methode scheint es ja nur beim stringTokenizer zu geben... hier erstmal mein Quellcode:
Java:
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Matrix {
private double[][] arr;
public static Matrix(String filename) {
try {
List<String> matRows = new ArrayList<String>();
BufferedReader myText = new BufferedReader(new FileReader(filename));
String line;
while ((line = myText.readLine()) != null) {
matRows.add(line);
}
int numOfRows = matRows.size(); // saves the number of rows
String stringMat = matRows.toString();
/*
* convert stringMat from String to InputStream:
*/
byte[] bytes = stringMat.getBytes();
InputStream is = new ByteArrayInputStream(bytes);
StreamTokenizer tokenizer = new StreamTokenizer(is);
/*
*her komme ich nicht weiter
*/
} catch (Exception e) {// Catch a possible exception
System.err.println("Error: " + e.getMessage());
}
}
wie kann ich nun weitermachen? wie komme ich an die zahl der token und wie kann ich sowohl kommata als auch freizeichen als trennung definieren? ein weiteres problem sind die klammern, die durch den weg über die Liste am anfang und am ende stehen. wie kann ich das lösen?
mein problem hat sich nun etwas verlagert , das mit dem einlesen hat jetzt alles geklappt, nun stehe ich aber vor dem algorithmischen problem, den vektor, den ich beim einlesen gewonnen habe, wieder in eine matrix zu überführen. mein ansatz funktioniert irgendwie nicht, wobei ich nicht erkenne wo da das problem ist,vielleicht kann mir ja hierbei jemand helfen?!
Java:
public static void readMat(String filename) {
try {
int numOfCol = 0;
List<String> list = new ArrayList<String>();
BufferedReader myText = new BufferedReader(new FileReader(filename));
String line;
while ((line = myText.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
numOfCol = st.countTokens();
while (st.hasMoreTokens()) {
list.add(st.nextToken());
}
}
int numOfRow = list.size() / numOfCol;
String[][] arr = new String[numOfRow][numOfCol];
for(int i=0; i<numOfRow; i++){
for(int j=0;j<list.size(); j++){
arr[i][j % numOfCol] = list.get(j);
}
}
for (int k = 0; k < numOfRow; ++k) {
for (int l = 0; l < numOfCol; ++l) {
System.out.print(arr[k][l] + "\t");
}
System.out.println("");
}
} catch (Exception e) {// Catch a possible exception
System.err.println("Error: " + e.getMessage());
}
}