diff --git a/Axel/src/de/hs_mannheim/informatik/spreadsheet/Spreadsheet.java b/Axel/src/de/hs_mannheim/informatik/spreadsheet/Spreadsheet.java index d09674d..511d338 100644 --- a/Axel/src/de/hs_mannheim/informatik/spreadsheet/Spreadsheet.java +++ b/Axel/src/de/hs_mannheim/informatik/spreadsheet/Spreadsheet.java @@ -96,21 +96,24 @@ public class Spreadsheet { return merker-1; } - + /** + * Hier wird überprüft, ob die Zelle existiert. + * @param a Name der Zelle + * @return true = Zelle existiert, false = Zelle existent nicht (zumindest nicht in der Tabelle) + */ public boolean zelleneingabe_pruefen(String a) { if (a.length() < 2) { //es soll eine einzelne Zelle angesprochen werde, also muss dafür die länge >2 sein return false; } - if (getRow(a) < 0 || getRow(a) >= cells.length) { //überprüfung ob die eingabe in die rows länge passt + if (getRow(a) < 0 || getRow(a) >= cells.length) { //überprüfung, ob die eingabe in die rows länge passt return false; } - if (getCol(a) < 0 || getCol(a) >= cells[0].length) { //überprüfung ob die eingabe in die Columns länge passt + if (getCol(a) < 0 || getCol(a) >= cells[0].length) { //überprüfung, ob die eingabe in die Columns länge passt return false; } return true; } - // ----- // business logic @@ -123,7 +126,7 @@ public class Spreadsheet { * @exception IOException If path does not exist. */ public void readCsv(String path, char separator, String startCellName) throws FileNotFoundException { - // TODO: implement this + //implement this ArrayList lines = readFile(path); String[] einzelnde_lines = new String[lines.size()]; int row_startcell = getRow(startCellName); @@ -137,6 +140,12 @@ public class Spreadsheet { } } + /** + * Liest eine csb Datei ein und speichert sie in eine ArrayList + * @param path von der Datei + * @return Liste mit den gespeicherten Zeilen von der csv Datei + * @throws FileNotFoundException + */ public static ArrayList readFile(String path) throws FileNotFoundException { ArrayList lines = new ArrayList<>(); Scanner sc = new Scanner(new File(path)); @@ -191,7 +200,7 @@ public class Spreadsheet { else if (formula.startsWith("MITTELWERT(")) // e.g. MITTELWERT(A3:A5) result = "" + mittelwert(formula.substring(11, 13), formula.substring(14, 16)); else if (formula.startsWith("STABW(")) // e.g. STABW(C6:D8) -> Standardabweichung - result = "TODO"; // TODO + result = "" + stabw(formula.substring(6, 8), formula.substring(9, 11)); else if (formula.startsWith("MIN(")) // e.g. MIN(C13:H13) -> kleinster Wert result = "" + min(formula.substring(4, 6), formula.substring(7, 9)); else if (formula.startsWith("MAX(")) // e.g. MAX(A1:A10) -> größter Wert @@ -207,6 +216,47 @@ public class Spreadsheet { cells[row][col].setValue("" + result); } + /** + * Berechnet die Standardabweichung + * @param startCellName The name of the cell in the upper left corner of the rectangle. + * @param endCellName The name of the cell in the lower right corner of the rectangle. + * @return Ergebnis bzw. die Standardabweichung + */ + private int stabw(String startCellName, String endCellName) { + int startCellRow = getRow(startCellName); + int startCellCol = getCol(startCellName); + int endCellRow = getRow(endCellName); + int endCellCol = getCol(endCellName); + int res = 0; + + int merker = 0; + int anzahl = 0; + int mittelwert = (int) (mittelwert(startCellName, endCellName)); + + //System.out.println("Mittelwert: "+mittelwert); + + for (int i = startCellRow; i <= endCellRow; i++) { + for (int j = startCellCol; j <= endCellCol; j++) { + merker = Integer.parseInt(cells[i][j].getValue()); + if (merker <= mittelwert) { + res = res + (mittelwert-merker)*(mittelwert-merker); + //System.out.println((mittelwert-merker)); + } else { + res = res + (merker - mittelwert)*(merker - mittelwert); + //System.out.println((merker - mittelwert)); + } + anzahl++; + } + } + //System.out.println(res); + //System.out.println(anzahl); + res = res/(anzahl-1); // oder: res = res/(anzahl-1); + + res = (int) Math.sqrt(res); + + return res; + } + /** * Method for calculating the sum of a rectangular block of cells, such as from A1 to B3. * @param startCellName The name of the cell in the upper left corner of the rectangle. @@ -230,6 +280,12 @@ public class Spreadsheet { return res; } + /** + * Rechnet das Produkt aus den Zellen von einem Viereck. + * @param startCellName The name of the cell in the upper left corner of the rectangle. + * @param endCellName The name of the cell in the lower right corner of the rectangle. + * @return Das Ergebnis. + */ private long pro(String startCellName, String endCellName) { int startCellRow = getRow(startCellName); int startCellCol = getCol(startCellName); @@ -251,6 +307,12 @@ public class Spreadsheet { return res; } + /** + * Gibt die kleinste Zahl aus den Zellen von einem Viereck. + * @param startCellName The name of the cell in the upper left corner of the rectangle. + * @param endCellName The name of the cell in the lower right corner of the rectangle. + * @return Kleinste Zahl + */ private long min(String startCellName, String endCellName) { int startCellRow = getRow(startCellName); int startCellCol = getCol(startCellName); @@ -272,6 +334,12 @@ public class Spreadsheet { return res; } + /** + * Gibt die größte Zahl aus den Zellen von einem Viereck. + * @param startCellName The name of the cell in the upper left corner of the rectangle. + * @param endCellName The name of the cell in the lower right corner of the rectangle. + * @return größte Zahl + */ private long max(String startCellName, String endCellName) { int startCellRow = getRow(startCellName); int startCellCol = getCol(startCellName); @@ -293,6 +361,12 @@ public class Spreadsheet { return res; } + /** + * Berechnet den Durchschnitt aus den Zellen von einem Viereck. (Summe von allen geteilt durch die Anzahl der Zellen) + * @param startCellName The name of the cell in the upper left corner of the rectangle. + * @param endCellName The name of the cell in the lower right corner of the rectangle. + * @return Durchschnitt + */ private long mittelwert(String startCellName, String endCellName) { int startCellRow = getRow(startCellName); int startCellCol = getCol(startCellName); @@ -383,8 +457,15 @@ public class Spreadsheet { return res; } - private long rechne(long a, int merker, int b) { - switch(merker){ + /** + * Berechnet 2 beliebige Zahlen, plus, minus, mal oder geteilt. (muss man angeben) + * @param auswahl hiermit wird bestimmt welche Rechenart benutzt werden soll. + * @param a erste Zahl + * @param b zweite Zahl + * @return Ergebnis + */ + private long rechne(long a, int auswahl, int b) { + switch(auswahl){ case 1: return a + b; case 2: