diff --git a/Axel/resources/zahlen.csv b/Axel/resources/zahlen.csv index cdf9945..fb7c673 100644 --- a/Axel/resources/zahlen.csv +++ b/Axel/resources/zahlen.csv @@ -1,100 +1,20 @@ -,,,,,,,,,,,,,,,,,,,,,,,,,, -1,,,,,,,,,,,,,,,,,,,,,,,,,, -123,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,=7*6,,,,,,,,,,,,,,,,, -,,,,,,,,,=3/2,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,=41+A2,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,, +Hallo,,,,,,,,,,,,,,,,,,, +123,,7,,,,,,,,,,,,,, +55,7,,4,,,,,,,,,,,,, +9,,,,,,,,,,,,,,,,,, +1,,,,,,,,=7*6,,,,,,,,,, +,,,,,,,,,=3/2,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,=41+A2,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,,,LL,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,Z1,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,, diff --git a/Axel/src/de/hs_mannheim/informatik/spreadsheet/Spreadsheet.java b/Axel/src/de/hs_mannheim/informatik/spreadsheet/Spreadsheet.java index 4761765..fc9bc63 100644 --- a/Axel/src/de/hs_mannheim/informatik/spreadsheet/Spreadsheet.java +++ b/Axel/src/de/hs_mannheim/informatik/spreadsheet/Spreadsheet.java @@ -1,5 +1,7 @@ package de.hs_mannheim.informatik.spreadsheet; +import org.junit.Test; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -145,9 +147,9 @@ public class Spreadsheet { } /** - * This method does the actual evaluation/calcluation of a specific cell - * @param cellName the name of the cell to be evaluated - * @return Nothing. + * + * @param row steht für die Zeile + * @param col steht für die Spalte */ private void evaluateCell(int row, int col) { String formula = cells[row][col].getFormula(); @@ -199,6 +201,13 @@ public class Spreadsheet { return result; } + + /** + * Methode zum berechnen des Produkts eines viereckigen Blocks aus Zellen. Beispiel A2 bis B2 + * @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 Produkt. Hier result + */ private long multiplier(String startCellName, String endCellName) { int startRow = getRow(startCellName); @@ -216,6 +225,12 @@ public class Spreadsheet { return result; } + /** + * Methode zum berechnen des Mittelwerts eines viereckigen Blocks aus Zellen. Beispiel A2 bis B2 + * @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 der Mittelwert. Hier result + */ private long mittelwert(String startCellName, String endCellName) { int startRow = getRow(startCellName); @@ -248,7 +263,8 @@ public class Spreadsheet { for (int j = startCol; j <= endCol; j++) { result = (Integer.parseInt(cells[i][j].getValue())); - if(result > (Integer.parseInt(cells[i][j].getValue()))) { + if(result > (Integer.parseInt(cells[i][j].getValue()))) //größer result für min Wert + { result = (Integer.parseInt(cells[i][j].getValue())); } @@ -267,7 +283,8 @@ public class Spreadsheet { for (int i = startRow; i <= endRow; i++) { for (int j = startCol; j <= endCol; j++) { - if(result < (Integer.parseInt(cells[i][j].getValue()))) { + if(result < (Integer.parseInt(cells[i][j].getValue()))) // kleiner result für max Wert + { result = (Integer.parseInt(cells[i][j].getValue())); } @@ -289,24 +306,86 @@ public class Spreadsheet { * @param formula The expression to be evaluated. * @return The result calculated. */ - private long calculate(String formula) throws ArithmeticException { + + public long calculate(String formula) throws ArithmeticException { Matcher m = Pattern.compile("([A-Z][0-9]*)|[-\\+\\*/]|[0-9]*").matcher(formula); - long res = 0; + long result = 0; + int zwischenspeicher = 0; + int counter = 0; + int newNumber = 0; // TODO implement - // uncomment the following to see an example how the elements of a formula can be accessed + while (m.find()) { // m.find() must always be used before m.group() String s = m.group(); if (!s.isEmpty()) { - System.out.println(s); + //System.out.println(s); + counter++; + + switch (counter){ + case 1: + try { + result = Integer.parseInt(s); + }catch (Exception ignored){ + result = Integer.parseInt(get(s)); + } + break; + case 2: + switch(s) { + case "+": + zwischenspeicher = 1; + break; + case "-": + zwischenspeicher = 2; + break; + case "*": + zwischenspeicher = 3; + break; + case "/": + zwischenspeicher = 4; + break; + default: + System.out.println("ERROR"); + break; + } + break; + case 3: + try { + newNumber = Integer.parseInt(s); + }catch (Exception ignored){ + newNumber = Integer.parseInt(get(s)); + } + result = rechner(result, zwischenspeicher, newNumber); + + counter = 1; + break; + default: + System.out.println("ERROR"); + break; + } } } - return res; + return result; + } + public static long rechner(long a, int auswahl, int b) { + switch(auswahl){ + case 1: + return a + b; + case 2: + return a - b; + case 3: + return a * b; + case 4: + return a / b; + default: + System.out.println("ERROR"); + break; + } + return 0; } - // ----- public String toString() { diff --git a/Axel/src/de/hs_mannheim/informatik/spreadsheet/SpreadsheetTest.java b/Axel/src/de/hs_mannheim/informatik/spreadsheet/SpreadsheetTest.java new file mode 100644 index 0000000..7d05459 --- /dev/null +++ b/Axel/src/de/hs_mannheim/informatik/spreadsheet/SpreadsheetTest.java @@ -0,0 +1,26 @@ +package de.hs_mannheim.informatik.spreadsheet; + +import org.junit.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SpreadsheetTest { + + @org.junit.jupiter.api.Test + void testCalculate() { + Spreadsheet spr = new Spreadsheet(25,25); // Irgendeine Größe einstellen des Spreadsheets + + assertEquals(spr.calculate("2+2"), 4); + assertEquals(spr.calculate("3*3"), 9); + assertEquals(spr.calculate("6/2"), 3); + + + + spr.put("A1", "6"); + spr.put("A2", "2"); + + assertEquals(spr.calculate("A1+A2"), 8); + assertEquals(spr.calculate("A1*A2"), 12); + assertEquals(spr.calculate("A1/A2"), 3); + } +}