1
0
Fork 0

Compare commits

...

2 Commits

2 changed files with 140 additions and 27 deletions

View File

@ -9,7 +9,6 @@ import java.util.Scanner;
* @author Oliver Hummel * @author Oliver Hummel
*/ */
public class Axel { public class Axel {
public static void main(String[] args) throws FileNotFoundException { public static void main(String[] args) throws FileNotFoundException {
/* /*
Spreadsheet spr = new Spreadsheet(100,100); Spreadsheet spr = new Spreadsheet(100,100);
@ -25,30 +24,41 @@ public class Axel {
spr.put("Z2", "23"); spr.put("Z2", "23");
*/ */
//System.out.println(spr); //You might want to put "UI loop" for entering value and formulas here resp. in some UI methods.
//spr.saveCsv("C:\\Users\\flori\\IdeaProjects\\PR1-Spreadsheet\\Axel\\resources\\zahlen.csv");
//spr.readCsv("C:\\Users\\flori\\IdeaProjects\\PR1-Spreadsheet\\Axel\\resources\\zahlen2.csv", ',',"A1");
//System.out.println(spr);
// TODO: You might want to put "UI loop" for entering value and formulas here resp. in some UI methods.
String eingabe = ""; String eingabe = "";
String merker = ""; String merker = "";
int auswahl = 0; int auswahl = 0;
boolean weiter; boolean weiter;
int zeilen = 0, spalten = 0;
System.out.println(); System.out.println();
System.out.println("Willkommen zum Spreadsheet Programm"); System.out.println("Willkommen zum Spreadsheet Programm");
System.out.println(); System.out.println();
System.out.println("Wie groß soll das Spreadsheet sein?"); System.out.println("Wie groß soll das Spreadsheet sein?");
System.out.print("Zeilen(1-26): ");
eingabe = abfrage(); do {
int zeilen = Integer.parseInt(eingabe); weiter = false;
System.out.print("Spalten(1-99): "); System.out.print("Zeilen(1-26): ");
eingabe = abfrage(); eingabe = abfrage();
int spalten = Integer.parseInt(eingabe);; try {
zeilen = Integer.parseInt(eingabe);
} catch (Exception ignored) {
weiter = true;
System.out.println("Falsche eingabe, versuchen Sie es erneut: ");
}
}while(weiter);
do {
weiter = false;
System.out.print("Spalten(1-99): ");
eingabe = abfrage();
try {
spalten = Integer.parseInt(eingabe);
} catch (Exception ignored) {
weiter = true;
System.out.println("Falsche eingabe, versuchen Sie es erneut: ");
}
}while(weiter);
Spreadsheet spr = new Spreadsheet(zeilen,spalten); Spreadsheet spr = new Spreadsheet(zeilen,spalten);
@ -82,6 +92,11 @@ public class Axel {
}while(weiter); }while(weiter);
} }
/**
* Speichert eine Tabelle in einem Path den man (der Benutzer) per Scanner eingeben muss.
* @param spr Tabelle die gespeichert werden soll.
* @throws FileNotFoundException
*/
private static void tabelle_speichern(Spreadsheet spr) throws FileNotFoundException { private static void tabelle_speichern(Spreadsheet spr) throws FileNotFoundException {
System.out.print("Path von der csv Datei: "); System.out.print("Path von der csv Datei: ");
String path = abfrage(); String path = abfrage();
@ -91,6 +106,11 @@ public class Axel {
System.out.println("Tabelle wurde gespeichert"); System.out.println("Tabelle wurde gespeichert");
} }
/**
* Liest eine Tabelle aus einer csv Datei ein, dafür muss man path, separator und startcell angeben.
* @param spr Tabelle die gespeichert werden soll.
* @throws FileNotFoundException
*/
private static void tabelle_einlesen(Spreadsheet spr) throws FileNotFoundException { private static void tabelle_einlesen(Spreadsheet spr) throws FileNotFoundException {
String eingabe, path, startcell; String eingabe, path, startcell;
char separator; char separator;
@ -111,6 +131,10 @@ public class Axel {
} }
/**
* Fragt so lange ab bis man (der Benutzer) eine richtige Zelle angibt, dort kann man dann etwas einfügen.
* @param spr Tabelle
*/
private static void zelle_bearbeiten(Spreadsheet spr) { private static void zelle_bearbeiten(Spreadsheet spr) {
String eingabe; String eingabe;
do { do {
@ -135,11 +159,17 @@ public class Axel {
spr.put(merker, eingabe); spr.put(merker, eingabe);
} }
/**
* Gibt ein kleines Menü auf der Console aus, dort kann man dann per eingabe (Zahl) wählen, was man tun will.
* @param spr
* @return Gibt die Zahl zurück, die der Benutzer eingegeben hat.
* @throws FileNotFoundException
*/
private static int menue(Spreadsheet spr) throws FileNotFoundException { private static int menue(Spreadsheet spr) throws FileNotFoundException {
do { do {
System.out.println(); System.out.println();
System.out.println("Auswahl Möglichkeiten:"); System.out.println("Auswahl Möglichkeiten:");
System.out.println("1. Zelle bearbeiten 2. Tabelle einfügen 3. Tabelle speichern"); System.out.println("1. Zelle bearbeiten 2. Tabelle einfügen 3. Tabelle speichern | oder \"exit\"");
System.out.print("Ihre auswahl: "); System.out.print("Ihre auswahl: ");
@ -174,11 +204,13 @@ public class Axel {
return 0; return 0;
} }
/**
* Hier hab ich etwas getrickst und den Scanner den ich öfter brauche einfach in eine Methode geschrieben. Sollte man wahrscheinlich so eher nicht tun.
* @return Was der Benutzer eingibt (String)
*/
private static String abfrage() { private static String abfrage() {
Scanner sc = new Scanner(System.in); Scanner sc = new Scanner(System.in);
String x = sc.nextLine(); String x = sc.nextLine();
return x; return x;
} }
} }

View File

@ -96,21 +96,24 @@ public class Spreadsheet {
return merker-1; 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) { 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 if (a.length() < 2) { //es soll eine einzelne Zelle angesprochen werde, also muss dafür die länge >2 sein
return false; 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; 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 false;
} }
return true; return true;
} }
// ----- // -----
// business logic // business logic
@ -123,7 +126,7 @@ public class Spreadsheet {
* @exception IOException If path does not exist. * @exception IOException If path does not exist.
*/ */
public void readCsv(String path, char separator, String startCellName) throws FileNotFoundException { public void readCsv(String path, char separator, String startCellName) throws FileNotFoundException {
// TODO: implement this //implement this
ArrayList<String> lines = readFile(path); ArrayList<String> lines = readFile(path);
String[] einzelnde_lines = new String[lines.size()]; String[] einzelnde_lines = new String[lines.size()];
int row_startcell = getRow(startCellName); 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<String> readFile(String path) throws FileNotFoundException { public static ArrayList<String> readFile(String path) throws FileNotFoundException {
ArrayList<String> lines = new ArrayList<>(); ArrayList<String> lines = new ArrayList<>();
Scanner sc = new Scanner(new File(path)); Scanner sc = new Scanner(new File(path));
@ -191,7 +200,7 @@ public class Spreadsheet {
else if (formula.startsWith("MITTELWERT(")) // e.g. MITTELWERT(A3:A5) else if (formula.startsWith("MITTELWERT(")) // e.g. MITTELWERT(A3:A5)
result = "" + mittelwert(formula.substring(11, 13), formula.substring(14, 16)); result = "" + mittelwert(formula.substring(11, 13), formula.substring(14, 16));
else if (formula.startsWith("STABW(")) // e.g. STABW(C6:D8) -> Standardabweichung 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 else if (formula.startsWith("MIN(")) // e.g. MIN(C13:H13) -> kleinster Wert
result = "" + min(formula.substring(4, 6), formula.substring(7, 9)); result = "" + min(formula.substring(4, 6), formula.substring(7, 9));
else if (formula.startsWith("MAX(")) // e.g. MAX(A1:A10) -> größter Wert 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); 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. * 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. * @param startCellName The name of the cell in the upper left corner of the rectangle.
@ -230,6 +280,12 @@ public class Spreadsheet {
return res; 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) { private long pro(String startCellName, String endCellName) {
int startCellRow = getRow(startCellName); int startCellRow = getRow(startCellName);
int startCellCol = getCol(startCellName); int startCellCol = getCol(startCellName);
@ -251,6 +307,12 @@ public class Spreadsheet {
return res; 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) { private long min(String startCellName, String endCellName) {
int startCellRow = getRow(startCellName); int startCellRow = getRow(startCellName);
int startCellCol = getCol(startCellName); int startCellCol = getCol(startCellName);
@ -272,6 +334,12 @@ public class Spreadsheet {
return res; 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) { private long max(String startCellName, String endCellName) {
int startCellRow = getRow(startCellName); int startCellRow = getRow(startCellName);
int startCellCol = getCol(startCellName); int startCellCol = getCol(startCellName);
@ -293,6 +361,12 @@ public class Spreadsheet {
return res; 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) { private long mittelwert(String startCellName, String endCellName) {
int startCellRow = getRow(startCellName); int startCellRow = getRow(startCellName);
int startCellCol = getCol(startCellName); int startCellCol = getCol(startCellName);
@ -383,8 +457,15 @@ public class Spreadsheet {
return res; 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: case 1:
return a + b; return a + b;
case 2: case 2: