import eprog.*; /** * <tt>FarbCode</tt><br> * eine Zusatzklasse für den Widerstand um den Farbcode zu berechnen. * * @see Widerstand * @see FLAGS * @see Widerst */ class FarbCode extends EprogIO { private String sCode; /** * <tt>Farbcode</tt><br> * Constructor für einen Farbcode. */ FarbCode(double dValue) { sCode = makeCode(dValue); } public String toString() { return sCode; } /** * <tt>makeCode()</tt><br> * Berechnet den Farbcode eines Widerstandes.<br> * Nimmt einen double entgegen. * * @return String */ private String makeCode(double dValue) { //von -2 an... String[] sCodeTable = {"si","go","sw","br","rt","or","ge","gn","bl","vi","gr","ws"}; int potenz = 0; StringBuffer tmpString = new StringBuffer("["); if(FLAGS.DEBUG) println("in 'makeCode()': value of rounded resistance:\t" + dValue); // "000" häng ich nur an, damit der String auf alle Fälle länger als 3 wird. String sAusgabe = Double.toString(dValue) + "000"; int iCounter = 0; //try, da ich ausserhalb des Array landen könnt... //(falls das Argument nicht der Spez entspricht. *g*) try{ for(int i=0; i<4 && i < sAusgabe.length(); i++) { if(Character.isDigit(sAusgabe.charAt(i)) && iCounter < 3) { if(FLAGS.DEBUG) println("in 'makeCode()': value of char:\t\t\t" + (sAusgabe.charAt(i) - 46)); //"- 46" da ich einfach den ASCII Code abziehe um auf //den echten Wert einer Zahl komm. //ASCII 48 entspricht einer 0. //da mein array eigentlich bei -2 beginnt, ziehe ich //hier nur 46 ab. tmpString.append(sCodeTable[sAusgabe.charAt(i) - 46] + " "); iCounter++; } } //die richtige Potenz ermittle ich mittels Logarithmus //Funktionen. int iPotenz = (int)(Math.log(dValue)/Math.log(10)); if(FLAGS.DEBUG) println("in 'makeCode()': value of potenz:\t\t" + (iPotenz)); tmpString.append(sCodeTable[iPotenz] + "]"); if(FLAGS.DEBUG) println("in 'makeCode()': return value of code:\t\t" + tmpString.toString()); return tmpString.toString(); } //wenn ich eine Exception bekomm, is ein Fehler im Argument. //(=Widerstand ist nicht codierbar) catch(ArrayIndexOutOfBoundsException e){ return "[Kein Codieren möglich]"; } } }