//Autor: Daniel Gratzl //MatNr: 0026845 //BspNr: 4032 //Beschreibung: Gesamtkapazitaet eines Kondensatornetzwerkes // // package Kapaz; import eprog.*; public class CapazNet extends EprogIO { /* Klassenvariablen */ private int value = 0; // Gesamtkapazitaet des Netzwerks private int count = 0; // Anzahl der Kondensatoren private boolean err = false; // bewirkt FALSCHE EINGABE /* Konstruktor */ public CapazNet(String s) { calc(s); } /* Zugriffsmethoden */ public int getValue() { return value; } public boolean getError() { return err; } public int getCount() { return count; } /* Berechnung der Gesamtkapazitaet */ private void calc(String s) { String t = null; int i = 0; int j = i+1; if (s.charAt(0) != '(') s = "("+s+")"; for (;j<s.length();) { if (s.charAt(j) == '(') { i = j; j++; } else if (s.charAt(j) == ')') { try { t= s.substring(0,i)+getTerm(s.substring(i+1,j))+s.substring(j+1,s.length()); s = t; if (s.charAt(0) != '(' || s.charAt(s.length()-1) != ')') { if ((s.indexOf('/') != -1) || (s.indexOf('+') != -1)) { s = "("+s+")"; } } }catch(IndexOutOfBoundsException e) { err = true; return; }catch(NumberFormatException e) { err = true; return; } i=0; j=i+1; } else j++; } try { value = Math.round(Float.valueOf(s).floatValue()); // Math. Runden des Float-Ergebnisses }catch(NumberFormatException e) { err = true; return; } count++; } private String getTerm(String s) throws NumberFormatException { int idx = 0; int i = s.indexOf('+'); int j = s.indexOf('/'); float erg = 0; if (-1 != i) { for (;i!=-1;) { count++; erg += 1/Float.valueOf(s.substring(idx,i)).floatValue(); idx = i+1; i = s.indexOf('+',idx); } erg += 1/Float.valueOf(s.substring(idx,s.length())).floatValue(); erg = 1/erg; return String.valueOf(erg); } else if (-1 != j) { for (;j!=-1;) { count++; erg += Float.valueOf(s.substring(idx,j)).floatValue(); idx = j+1; j = s.indexOf('/',idx); } erg += Float.valueOf(s.substring(idx,s.length())).floatValue(); return String.valueOf(erg); } err = true; return ""; } }