Ich habe eine Frage zu einer Dreiecksform. Ich habe in einer Datei Zahlen in Dreiecksform stehen, z. B.
Diese Datei kann mal mehr mal weniger Zeilen/Spalten haben. Ich wollte das erst über Array lösen, die sind mir aber zu wenig dynamisch. Jetzt habe ich das über eine HashMap/TreeMap gelöst:
Allerdings wird bei der Ausgabe nicht richtig sortiert. So steht in der Ausgabe folgendes:
Der von mir zusammengesetzte Schlüssel repräsentiert also Zeile/Spalte. Wie erhalte ich die korrekte Reihenfolge, also
Bin auch für andere Lösungsvorschlage als Map/HashMap/TreeMap dankbar. Es sollte also Matrix-Repräsentation sein.
Code:
1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
11; 12; 13; 14; 15; 16; 17; 18; 19; ;
20; 21; 22; 23; 24; 25; 26; 27; ; ;
28; 29; 30; 31; 32; 33; 34; ; ; ;
35; 36; 37; 38; 39; 40; ; ; ; ;
41; 42; 43; 44; 45; ; ; ; ; ;
46; 47; 48; 49; ; ; ; ; ; ;
50; 51; 52; ; ; ; ; ; ; ;
53; 54; ; ; ; ; ; ; ; ;
55; ; ; ; ; ; ; ; ; ;
Java:
import java.io*;
import java.text.*;
import java.util.*;
public class Triangle {
public static void main(String[] args) {
Map<String, Double> triangle = new HashMap<>();
String filename = "triangle.csv";
File file = new File(filename);
try {
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
int index = 1;
int year= 1;
while ((line = bufferedReader.readLine()) != null) {
String[] items = line.split("\\s*;\\s*");
for (String string : items) {
triangle.put(year+ "-" + index, Double.parseDouble(string));
index += 1;
}
year += 1;
index = 1;
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
// format output
DecimalFormat format = new DecimalFormat("#,##0.00");
Map<String, Double> treeMap = new TreeMap<String, Double>(triangle);
Set<Entry<String, Double>> set = treeMap.entrySet();
Iterator<Entry<String, Double>> iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry<String, Double> entry = (Map.Entry<String, Double>) iterator.next();
String key = entry.getKey();
Double val = entry.getValue();
System.out.printf("%-" + 10 + "." + 10 + "s %12s%n", key, format.format(val));
}
}
}
Code:
1-1 1
1-10 10
1-2 2
...
Code:
1-1 1
1-2 2
1-3 3
...