forked from hummel/PR1-Spreadsheet
Compare commits
No commits in common. "de40e65e219e9438ae365415bce2e515ff103ff7" and "dc301c13fab69d36dbd518d983b5c4c5d3a1a95f" have entirely different histories.
de40e65e21
...
dc301c13fa
|
@ -9,6 +9,7 @@ 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);
|
||||||
|
@ -24,41 +25,30 @@ public class Axel {
|
||||||
spr.put("Z2", "23");
|
spr.put("Z2", "23");
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//You might want to put "UI loop" for entering value and formulas here resp. in some UI methods.
|
//System.out.println(spr);
|
||||||
|
|
||||||
|
//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): ");
|
||||||
do {
|
eingabe = abfrage();
|
||||||
weiter = false;
|
int zeilen = Integer.parseInt(eingabe);
|
||||||
System.out.print("Zeilen(1-26): ");
|
System.out.print("Spalten(1-99): ");
|
||||||
eingabe = abfrage();
|
eingabe = abfrage();
|
||||||
try {
|
int spalten = Integer.parseInt(eingabe);;
|
||||||
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);
|
||||||
|
|
||||||
|
@ -92,11 +82,6 @@ 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();
|
||||||
|
@ -106,11 +91,6 @@ 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;
|
||||||
|
@ -131,10 +111,6 @@ 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 {
|
||||||
|
@ -159,17 +135,11 @@ 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 | oder \"exit\"");
|
System.out.println("1. Zelle bearbeiten 2. Tabelle einfügen 3. Tabelle speichern");
|
||||||
|
|
||||||
System.out.print("Ihre auswahl: ");
|
System.out.print("Ihre auswahl: ");
|
||||||
|
|
||||||
|
@ -204,13 +174,11 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -96,24 +96,21 @@ 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
|
||||||
|
|
||||||
|
@ -126,7 +123,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 {
|
||||||
//implement this
|
// TODO: 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);
|
||||||
|
@ -140,12 +137,6 @@ 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));
|
||||||
|
@ -200,7 +191,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 = "" + stabw(formula.substring(6, 8), formula.substring(9, 11));
|
result = "TODO"; // TODO
|
||||||
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
|
||||||
|
@ -216,47 +207,6 @@ 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.
|
||||||
|
@ -280,12 +230,6 @@ 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);
|
||||||
|
@ -307,12 +251,6 @@ 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);
|
||||||
|
@ -334,12 +272,6 @@ 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);
|
||||||
|
@ -361,12 +293,6 @@ 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);
|
||||||
|
@ -457,15 +383,8 @@ public class Spreadsheet {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private long rechne(long a, int merker, int b) {
|
||||||
* Berechnet 2 beliebige Zahlen, plus, minus, mal oder geteilt. (muss man angeben)
|
switch(merker){
|
||||||
* @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:
|
||||||
|
|
Loading…
Reference in New Issue