/Simplex/src/mx/uacam/fdi/io/simplex/resolvedor/mate/Ecuacion.java

http://mtdsimplex.googlecode.com/ · Java · 231 lines · 144 code · 24 blank · 63 comment · 43 complexity · 0376eb5f520df359ef56415c24044660 MD5 · raw file

  1. /*
  2. * @(#)Ecuacion.java 1.7.1 10/10/09
  3. * @charset "utf-8";
  4. * Copyright (c) pendiente.
  5. */
  6. package mx.uacam.fdi.io.simplex.resolvedor.mate;
  7. import java.io.Serializable;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import java.util.regex.Matcher;
  11. import java.util.regex.Pattern;
  12. /**
  13. *
  14. * Esta clase es la que realiza las operaciones y devuelve los resultados para
  15. * que sean graficados.
  16. *
  17. * @author Neo Cs || [El ??gel Blanco]
  18. * @version 1.7.1, 10/10/09
  19. */
  20. public class Ecuacion implements Serializable{
  21. private static final long serialVersionUID = 5601572475251277384L;
  22. private OperadorRelacional tipoIgualdad;
  23. private List<Monomio> monomios;
  24. private Monomio monomioResultado;
  25. private int resultado;
  26. /**
  27. *
  28. * @param unaEcuacion
  29. */
  30. public Ecuacion(String unaEcuacion) {
  31. unaEcuacion = unaEcuacion.trim();
  32. unaEcuacion = unaEcuacion.toLowerCase();
  33. String[] cadenaNueva = unaEcuacion.split("<=");
  34. if (cadenaNueva.length == 2) {
  35. tipoIgualdad = OperadorRelacional.MENOR_IGUAL_QUE;
  36. } else if ((cadenaNueva = unaEcuacion.split(">=")).length == 2) {
  37. tipoIgualdad = OperadorRelacional.MAYOR_IGUAL_QUE;
  38. } else if ((cadenaNueva = unaEcuacion.split("=")).length == 2) {
  39. tipoIgualdad = OperadorRelacional.IGUAL;
  40. } else if ((cadenaNueva = unaEcuacion.split(">")).length == 2) {
  41. tipoIgualdad = OperadorRelacional.MAYOR_QUE;
  42. } else if ((cadenaNueva = unaEcuacion.split("<")).length == 2) {
  43. tipoIgualdad = OperadorRelacional.MENOR_QUE;
  44. } else {
  45. throw new IllegalArgumentException("Ecuaci??n no valida: " + unaEcuacion);
  46. }
  47. String regexMonomio = "([-\\+]*\\d*[a-y]\\d+)";
  48. Pattern p = Pattern.compile(regexMonomio);
  49. Matcher m = p.matcher(unaEcuacion);
  50. List<Monomio> monomios = new ArrayList<Monomio>();
  51. while (m.find()) {
  52. String group = m.group();
  53. monomios.add(new Monomio(group));
  54. }
  55. this.monomios = monomios;
  56. if (cadenaNueva[1].length() > cadenaNueva[0].length()) {
  57. try {
  58. resultado = Integer.parseInt(cadenaNueva[0]);
  59. } catch (NumberFormatException ex) {
  60. monomioResultado = new Monomio(cadenaNueva[0]);
  61. }
  62. } else {
  63. try {
  64. resultado = Integer.parseInt(cadenaNueva[1]);
  65. } catch (NumberFormatException ex) {
  66. monomioResultado = new Monomio(cadenaNueva[1]);
  67. }
  68. }
  69. }
  70. /**
  71. *
  72. * @param monomios
  73. * @param tipoIgualdad
  74. * @param resultado
  75. */
  76. public Ecuacion(Monomio[] monomios, OperadorRelacional tipoIgualdad, int resultado) {
  77. setMonomios(monomios);
  78. setResultado(resultado);
  79. setTipoIgualdad(tipoIgualdad);
  80. }
  81. /**
  82. *
  83. * @param monomios
  84. * @param tipoIgualdad
  85. * @param monomioResultado
  86. */
  87. public Ecuacion(Monomio[] monomios, OperadorRelacional tipoIgualdad, Monomio monomioResultado) {
  88. setMonomioResultado(monomioResultado);
  89. setMonomios(monomios);
  90. setTipoIgualdad(tipoIgualdad);
  91. }
  92. /**
  93. * @return the tipoIgualdad
  94. */
  95. public OperadorRelacional getTipoIgualdad() {
  96. return tipoIgualdad;
  97. }
  98. /**
  99. * @param tipoIgualdad the tipoIgualdad to set
  100. */
  101. public void setTipoIgualdad(OperadorRelacional tipoIgualdad) {
  102. switch (tipoIgualdad) {
  103. case IGUAL:
  104. case MAYOR_QUE:
  105. case MENOR_QUE:
  106. case MAYOR_IGUAL_QUE:
  107. case MENOR_IGUAL_QUE:
  108. this.tipoIgualdad = tipoIgualdad;
  109. break;
  110. default:
  111. throw new IllegalArgumentException("Error tipo desigualdad o igualdad invalida");
  112. }
  113. }
  114. /**
  115. * @return the monomios
  116. */
  117. public Monomio[] getMonomios() {
  118. return monomios.toArray(new Monomio[0]);
  119. }
  120. /**
  121. * @param monomios the monomios to set
  122. */
  123. public void setMonomios(Monomio[] monomios) {
  124. this.monomios = new ArrayList<Monomio>();
  125. if (monomios != null) {
  126. for (Monomio i : monomios) {
  127. addMonomio(i);
  128. }
  129. }
  130. }
  131. /**
  132. * @return the resultado
  133. */
  134. public int getResultado() {
  135. return resultado;
  136. }
  137. /**
  138. * @param resultado the resultado to set
  139. */
  140. public void setResultado(int resultado) {
  141. this.resultado = resultado;
  142. }
  143. /**
  144. * A??ade un <tt>Monomio</tt> al objeto <tt>Ecuacion</tt>
  145. *
  146. * @param monomio {@code Monomio}
  147. */
  148. public void addMonomio(Monomio monomio) {
  149. monomios.add(monomio);
  150. }
  151. /**
  152. *
  153. * @param index
  154. * @return the Monomio
  155. */
  156. public Monomio getMonomio(int index) {
  157. return monomios.get(index);
  158. }
  159. /**
  160. * @return the monomioResultado
  161. */
  162. public Monomio getMonomioResultado() {
  163. return monomioResultado;
  164. }
  165. /**
  166. * @param monomioResultado the monomioResultado to set
  167. */
  168. public void setMonomioResultado(Monomio monomioResultado) {
  169. this.monomioResultado = monomioResultado;
  170. }
  171. @Override
  172. public boolean equals(Object obj) {
  173. if (obj == null) {
  174. return false;
  175. }
  176. if (getClass() != obj.getClass()) {
  177. return false;
  178. }
  179. final Ecuacion other = (Ecuacion) obj;
  180. if (this.tipoIgualdad != other.tipoIgualdad) {
  181. return false;
  182. }
  183. if (this.monomios != other.monomios && (this.monomios == null || !this.monomios.equals(other.monomios))) {
  184. return false;
  185. }
  186. if (this.monomioResultado != other.monomioResultado && (this.monomioResultado == null || !this.monomioResultado.equals(other.monomioResultado))) {
  187. return false;
  188. }
  189. if (this.resultado != other.resultado) {
  190. return false;
  191. }
  192. return true;
  193. }
  194. @Override
  195. public int hashCode() {
  196. int hash = 3;
  197. hash = 67 * hash + (this.tipoIgualdad != null ? this.tipoIgualdad.hashCode() : 0);
  198. hash = 67 * hash + (this.monomios != null ? this.monomios.hashCode() : 0);
  199. hash = 67 * hash + (this.monomioResultado != null ? this.monomioResultado.hashCode() : 0);
  200. hash = 67 * hash + this.resultado;
  201. return hash;
  202. }
  203. @Override
  204. public String toString() {
  205. return "Ecuacion{ monomios=" + monomios + ", tipoIgualdad=" + tipoIgualdad + ", monomioResultado=" + monomioResultado + ", resultado=" + resultado + '}';
  206. }
  207. }