1 00:00:01,520 --> 00:00:10,099 Hola a todos, os voy a hacer unas anotaciones o apuntes o añadidos a la corrección que 2 00:00:10,099 --> 00:00:14,980 hicimos en casa de la cuenta bancaria. Son algunas mejoras que yo he pensado que deberían 3 00:00:14,980 --> 00:00:22,940 hacerse. Bien, mi proyecto tiene dos clases. Una es la cuenta bancaria en sí y otra sería 4 00:00:22,940 --> 00:00:30,140 el banco. En cuenta bancaria, que es la que estoy proyectando, he importado dos librerías, 5 00:00:30,140 --> 00:00:32,000 la del MAC y el ArrayList 6 00:00:32,000 --> 00:00:35,920 porque voy a usar cálculos y lista de Array 7 00:00:35,920 --> 00:00:38,259 lo más importante, mi cuenta bancaria 8 00:00:38,259 --> 00:00:40,719 inicialmente en la línea 8 y 9 9 00:00:40,719 --> 00:00:41,939 aquí 10 00:00:41,939 --> 00:00:45,899 tengo dos atributos 11 00:00:45,899 --> 00:00:49,700 que aparte de ser privados 12 00:00:49,700 --> 00:00:50,880 los he marcado con Final 13 00:00:50,880 --> 00:00:52,380 ¿qué quiere decir esto? 14 00:00:52,500 --> 00:00:53,600 que son constantes 15 00:00:53,600 --> 00:00:57,079 y solo van a poder ser modificados en el constructor 16 00:00:57,079 --> 00:00:58,119 en este punto 17 00:00:58,119 --> 00:00:59,179 aquí tengo un constructor 18 00:00:59,179 --> 00:01:02,340 cuando creemos la cuenta bancaria 19 00:01:02,340 --> 00:01:03,700 se guarda en el IVA de titular 20 00:01:03,700 --> 00:01:06,400 y luego nunca más pueden modificarse 21 00:01:06,400 --> 00:01:08,359 una decisión que he tomado yo 22 00:01:08,359 --> 00:01:09,640 entonces estos atributos 23 00:01:09,640 --> 00:01:11,959 son privados 24 00:01:11,959 --> 00:01:14,019 que es decir, de fuera no se pueden acceder 25 00:01:14,019 --> 00:01:16,140 se tiene que acceder con el 26 00:01:16,140 --> 00:01:18,280 con el getter y no vais a poder 27 00:01:18,280 --> 00:01:20,180 usar el setter porque están marcados 28 00:01:20,180 --> 00:01:21,420 como final 29 00:01:21,420 --> 00:01:24,040 si yo intentara hacer aquí un 30 00:01:24,040 --> 00:01:24,480 setter 31 00:01:24,480 --> 00:01:26,840 para este atributo 32 00:01:26,840 --> 00:01:33,730 vale, tendría que hacerlo 33 00:01:33,730 --> 00:01:35,810 con public 34 00:01:35,810 --> 00:01:36,790 void 35 00:01:36,790 --> 00:01:39,769 set por ejemplo 36 00:01:39,769 --> 00:01:41,209 iván 37 00:01:41,209 --> 00:01:43,930 y recibiría 38 00:01:43,930 --> 00:01:44,510 un 39 00:01:44,510 --> 00:01:47,129 iván es un string 40 00:01:47,129 --> 00:01:51,170 mientras escribo me pauso 41 00:01:51,170 --> 00:01:53,390 bien 42 00:01:53,390 --> 00:01:55,310 he escrito el método 43 00:01:55,310 --> 00:01:57,230 que simplemente 44 00:01:57,230 --> 00:01:58,969 es un set que recibe 45 00:01:58,969 --> 00:02:01,209 un argumento que le llamo iván 46 00:02:01,209 --> 00:02:05,170 e intento hacer un dis.ivan igual a lo recibido 47 00:02:05,170 --> 00:02:07,750 y fijaros que me aparece una marca, un error 48 00:02:07,750 --> 00:02:12,509 y me dice que no se puede asignar un valor a una variable final 49 00:02:12,509 --> 00:02:15,729 porque si eso está establecido como que es el valor final y no cambia 50 00:02:15,729 --> 00:02:16,650 así que lo quito 51 00:02:16,650 --> 00:02:22,610 y ya hemos visto que estas dos primeras variables son final 52 00:02:22,610 --> 00:02:24,409 porque no quiero que puedan modificarse 53 00:02:24,409 --> 00:02:28,810 luego tengo dos atributos normales corrientes 54 00:02:28,810 --> 00:02:30,229 marcados como private 55 00:02:30,229 --> 00:02:39,590 entonces sólo pueden modificarse con el setter. Y luego he creado, que está aquí la diferencia, 56 00:02:39,590 --> 00:02:46,250 he creado tres constantes, las llamo constantes de clase, porque están marcadas como static y final. 57 00:02:46,250 --> 00:02:53,509 Static quiere decir que no son de un objeto en concreto, sino de toda la clase. Todos los objetos 58 00:02:53,509 --> 00:02:59,689 van a conocer esta variable, la pueden utilizar, pero no es de cada uno. Y la he marcado como final 59 00:02:59,689 --> 00:03:03,810 de tal manera que no pueden modificarse, igual que los otros atributos. 60 00:03:04,530 --> 00:03:08,009 Tengo movimientos máximos, saldo mínimo y avisar a Hacienda. 61 00:03:08,169 --> 00:03:11,490 Y he establecido los valores en 100, menos 50 y 3.000. 62 00:03:11,909 --> 00:03:19,189 De esta manera, cuando posteriormente en los métodos queramos usar estos valores como límite, 63 00:03:19,289 --> 00:03:24,270 no vamos a poner los números, vamos a poner el valor del atributo. 64 00:03:24,270 --> 00:03:30,569 Voy con el primer constructor, con el primer método y luego vemos los valores en nuestros métodos. 65 00:03:31,710 --> 00:03:36,750 El constructor cuenta bancaria, guardo el IVAN y el titular, que son los únicos que recibe. 66 00:03:37,330 --> 00:03:46,449 Inicialmente el saldo lo pone a cero y los movimientos, que por cierto no lo he dicho, están aquí, se lo he dicho, pero es un ArrayList. 67 00:03:46,930 --> 00:03:51,530 Entonces el ArrayList inicialmente lo crea, así que lo va a crear a cero. 68 00:03:52,469 --> 00:03:56,610 Ahora, aquí vienen los métodos estáticos que me parecen muy interesantes. 69 00:03:57,129 --> 00:03:59,129 He creado dos métodos estáticos. 70 00:03:59,409 --> 00:04:02,650 ¿Eso qué quiere decir? Lo mismo que en las variables que estaban antes. 71 00:04:03,289 --> 00:04:06,949 Estas tres variables que van de la 16 a la 18 son estáticas, 72 00:04:06,949 --> 00:04:10,969 y he dicho que no son de un objeto en concreto, sino de toda la clase. 73 00:04:11,110 --> 00:04:14,490 Así que todos los objetos las pueden utilizar, pero son de la clase. 74 00:04:15,069 --> 00:04:17,930 Pues ocurre lo mismo con estos dos métodos. 75 00:04:17,930 --> 00:04:22,329 están marcados como estáticos en la línea 36 y la línea 40 76 00:04:22,329 --> 00:04:27,430 y eso quiere decir que no se van a instanciar para cada clase 77 00:04:27,430 --> 00:04:30,569 y que los podéis utilizar sin haber creado un objeto 78 00:04:30,569 --> 00:04:33,529 son unos métodos que ofrece la clase 79 00:04:33,529 --> 00:04:40,269 no sé si irme a la cuenta, no, sigo con la cuenta 80 00:04:40,269 --> 00:04:42,350 o sea, irme al banco o seguir con la cuenta 81 00:04:42,350 --> 00:04:44,810 el resto de métodos que tengo aquí 82 00:04:44,810 --> 00:04:49,290 tengo los getter del IVAN titulado saldo y movimiento 83 00:04:49,290 --> 00:04:51,529 que lo único que hacen es devolverlos 84 00:04:51,529 --> 00:04:55,709 y luego tengo un método para ingresar 85 00:04:55,709 --> 00:04:57,370 y un método para retirar 86 00:04:57,370 --> 00:05:00,850 estos métodos ya venían de la solución del otro profe 87 00:05:00,850 --> 00:05:03,470 lo único que hacen, lo que él propone es que si la cantidad 88 00:05:03,470 --> 00:05:06,310 es menor o igual que cero, devuelvas un false 89 00:05:06,310 --> 00:05:09,610 y si no es menor que cero, que quieren que siempre 90 00:05:09,610 --> 00:05:12,290 el usuario meta mayor que cero, introduzca un número mayor que cero 91 00:05:12,290 --> 00:05:18,290 llama a operar y llama a operar con la cantidad en positivo o en negativo 92 00:05:18,290 --> 00:05:21,889 operar con positivo y operar con negativo 93 00:05:21,889 --> 00:05:23,709 y aquí tenéis la operar 94 00:05:23,709 --> 00:05:29,029 operar devuelve un boolean porque va a devolver true si todo fue bien 95 00:05:29,029 --> 00:05:32,610 y false si algo fue mal y no se pudo operar 96 00:05:32,610 --> 00:05:35,629 lo mismo que retirar e ingresar 97 00:05:35,629 --> 00:05:38,730 entonces cuando retirar e ingresar llaman a operar 98 00:05:38,730 --> 00:05:44,370 cuando operar les devuelve el control, devuelven el mismo valor que ha devuelto operar. 99 00:05:44,490 --> 00:05:49,230 Así que si operar dice que no se pudo operar, retirar va a devolver lo mismo que operar 100 00:05:49,230 --> 00:05:53,089 e ingresar va a devolver lo mismo que operar, tanto si es true como si es false. 101 00:05:53,670 --> 00:05:54,310 Voy a operar. 102 00:05:55,370 --> 00:05:59,910 La idea de operar es que no puedo llegar a un saldo inferior a saldo mínimo 103 00:05:59,910 --> 00:06:06,829 y que no puedo registrar más de los máximos movimientos que se hayan indicado al principio. 104 00:06:06,829 --> 00:06:09,790 por ahora me habían dicho que por ponerlo fácil 105 00:06:09,790 --> 00:06:11,769 los máximos movimientos eran 106 00:06:11,769 --> 00:06:13,470 aquí, 100 107 00:06:13,470 --> 00:06:15,689 si yo en algún momento lo quiero cambiar 108 00:06:15,689 --> 00:06:17,589 lo cambio aquí arriba y el método 109 00:06:17,589 --> 00:06:19,490 no lo va a saber, simplemente va a usar 110 00:06:19,490 --> 00:06:21,250 aquí 111 00:06:21,250 --> 00:06:25,040 vale 112 00:06:25,040 --> 00:06:26,740 aquí 113 00:06:26,740 --> 00:06:28,939 solo va a usar máximos movimientos 114 00:06:28,939 --> 00:06:31,399 voy a ir viendo el método por orden 115 00:06:31,399 --> 00:06:33,139 lo primero que hace 116 00:06:33,139 --> 00:06:35,560 es comprobar que no nos pasamos 117 00:06:35,560 --> 00:06:36,519 del saldo mínimo 118 00:06:36,519 --> 00:06:39,540 el saldo mínimo está indicado arriba y son 50 119 00:06:39,540 --> 00:06:41,959 igual que indicado en máximos movimientos 100 120 00:06:41,959 --> 00:06:44,399 entonces, perdón, menos 50 121 00:06:44,399 --> 00:06:48,160 si el saldo que yo tengo ahora mismo en mi cuenta 122 00:06:48,160 --> 00:06:51,360 más la cantidad que me llega, que puede ser positiva o negativa 123 00:06:51,360 --> 00:06:52,800 si es positiva no va a importar 124 00:06:52,800 --> 00:06:55,680 pero si es negativa se la va a restar a saldo 125 00:06:55,680 --> 00:06:57,860 y vamos a ver si es menor que el saldo mínimo 126 00:06:57,860 --> 00:07:04,040 entonces si sucede que el saldo más la cantidad es menor que el saldo mínimo 127 00:07:04,040 --> 00:07:06,480 entonces imprimo por la consola 128 00:07:06,480 --> 00:07:08,319 de error, que esta hora no la habéis visto 129 00:07:08,319 --> 00:07:09,360 o no la hemos recordado 130 00:07:09,360 --> 00:07:12,100 el system error es una salida 131 00:07:12,100 --> 00:07:13,279 de errores, si sale 132 00:07:13,279 --> 00:07:16,180 a gustos en el NetBeans o sale por el mismo 133 00:07:16,180 --> 00:07:18,000 canal, abajo 134 00:07:18,000 --> 00:07:20,100 ahora lo veremos, pero puede salir 135 00:07:20,100 --> 00:07:21,759 por un canal diferente dependiendo 136 00:07:21,759 --> 00:07:23,920 de la configuración que tengamos 137 00:07:23,920 --> 00:07:26,259 por resumir, entonces imprimo 138 00:07:26,259 --> 00:07:28,360 por la consola de errores que no se puede retirar 139 00:07:28,360 --> 00:07:29,879 ese importe 140 00:07:29,879 --> 00:07:31,060 y luego si 141 00:07:31,060 --> 00:07:33,399 si puedo hacerla 142 00:07:33,399 --> 00:07:36,120 y el programa terminaría, haría un return false 143 00:07:36,120 --> 00:07:38,339 y me iría, entonces si estoy en este punto 144 00:07:38,339 --> 00:07:40,319 es que yo puedo operar 145 00:07:40,319 --> 00:07:41,379 así que al saldo 146 00:07:41,379 --> 00:07:43,839 le sumo lo que más igual 147 00:07:43,839 --> 00:07:46,019 le sumo lo que hubiera en saldo más la cantidad 148 00:07:46,019 --> 00:07:48,060 y voy a añadir 149 00:07:48,060 --> 00:07:49,720 los movimientos por el final 150 00:07:49,720 --> 00:07:52,300 yo como ArrayList hago movimientos.add 151 00:07:52,300 --> 00:07:54,259 la cantidad y lo añade al final 152 00:07:54,259 --> 00:07:56,220 en este momento yo voy a mirar 153 00:07:56,220 --> 00:07:58,279 aquí si me he pasado el máximo 154 00:07:58,279 --> 00:08:00,079 de movimientos al meter este nuevo 155 00:08:00,079 --> 00:08:02,379 movimiento, si yo tengo más de 100 156 00:08:02,379 --> 00:08:04,439 o sea, 101, elimino 157 00:08:04,439 --> 00:08:06,360 el movimiento más antiguo, que yo sé que es el que 158 00:08:06,360 --> 00:08:08,199 está en la posición 0, así que yo hago 159 00:08:08,199 --> 00:08:10,560 movimientos de move 0 160 00:08:10,560 --> 00:08:12,459 y con eso elimino el que me sobraba 161 00:08:12,459 --> 00:08:13,720 si no, no tengo que hacer nada 162 00:08:13,720 --> 00:08:16,920 y luego tengo en cuenta los avisos 163 00:08:16,920 --> 00:08:18,639 si el saldo 164 00:08:18,639 --> 00:08:20,459 es menor que 0 165 00:08:20,459 --> 00:08:22,300 imprime un aviso de saldo 166 00:08:22,300 --> 00:08:24,540 negativo, que yo creo que no estaba en el 167 00:08:24,540 --> 00:08:26,660 enunciado, un momento que paro y lo miro 168 00:08:28,899 --> 00:08:30,879 bien, he puesto el enunciado 169 00:08:30,879 --> 00:08:32,899 y he estado recordando lo que pedía 170 00:08:32,899 --> 00:08:34,460 para ver si realmente 171 00:08:34,460 --> 00:08:36,759 la solución propuesta por el otro profe 172 00:08:36,759 --> 00:08:38,460 y lo que yo había leído tiene sentido 173 00:08:38,460 --> 00:08:42,480 fijaros, en la clase cuenta bancaria 174 00:08:42,480 --> 00:08:43,360 que es la que estamos 175 00:08:43,360 --> 00:08:45,980 dice una cuenta bancaria 176 00:08:45,980 --> 00:08:49,019 datos asociados, titular, saldo y demás 177 00:08:49,019 --> 00:08:50,600 en la cuenta 178 00:08:50,600 --> 00:08:52,399 100 números para simplificar 179 00:08:52,399 --> 00:08:54,399 100 movimientos, vale, cuando se crea la cuenta 180 00:08:54,399 --> 00:08:56,419 es obligatorio que tenga un IVAN y un titular 181 00:08:56,419 --> 00:08:58,039 que no podrán cambiar 182 00:08:58,039 --> 00:09:00,460 nunca, entonces para que no puedan 183 00:09:00,460 --> 00:09:05,320 cambiar nunca, lo que tenéis que hacer es lo que he dicho yo, convertirlo en final. 184 00:09:05,480 --> 00:09:14,200 Lo voy a poner aquí a la derecha, este aquí, a la izquierda, y os lo voy a enseñar de 185 00:09:14,200 --> 00:09:20,460 nuevo. Aquí está. Entonces, para que no puedan cambiar, estos atributos están marcados 186 00:09:20,460 --> 00:09:28,279 como final. Luego, sigue diciendo, el saldo es de 0 euros y la cuenta no tendrá movimientos. 187 00:09:28,279 --> 00:09:33,899 Entonces, cuando yo lo creo, el saldo en la línea 29 es 0 y la cuenta con movimientos vacíos. 188 00:09:34,460 --> 00:09:36,840 Ahora, esto me resulta interesante mientras leía. 189 00:09:36,940 --> 00:09:41,460 El saldo solo puede valiar cuando se produce un ingreso o una retirada. 190 00:09:41,940 --> 00:09:47,539 Si os dais cuenta, en la clase cuenta no hay setter. 191 00:09:48,200 --> 00:09:53,059 No se puede modificar el, primero, el IVA en el titular no se puede, 192 00:09:53,139 --> 00:09:57,659 como ya he explicado antes porque está como final, pero no hay setter para el saldo. 193 00:09:57,659 --> 00:09:59,600 de esa manera 194 00:09:59,600 --> 00:10:02,059 prohíbes que alguien modifique el saldo 195 00:10:02,059 --> 00:10:03,320 solo se modifica el saldo 196 00:10:03,320 --> 00:10:06,059 cuando entramos en el operar 197 00:10:06,879 --> 00:10:11,639 ingresos y retiradas 198 00:10:11,639 --> 00:10:13,940 solo pueden ser valores superiores a cero 199 00:10:13,940 --> 00:10:15,799 por eso el propio que ha hecho la solución 200 00:10:15,799 --> 00:10:17,659 da error cuando imprimes 201 00:10:17,659 --> 00:10:19,860 cuando introduce otro usuario 202 00:10:19,860 --> 00:10:21,860 o sea, otro número del usuario 203 00:10:21,860 --> 00:10:22,539 menos de cero 204 00:10:22,539 --> 00:10:26,220 y luego el saldo de la cuenta a menos 50 205 00:10:26,220 --> 00:10:29,200 y aquí está el mensaje que yo estaba buscando 206 00:10:29,200 --> 00:10:32,379 si se produce un movimiento que deje la cuenta con un saldo negativo 207 00:10:32,379 --> 00:10:36,080 no inferior a menos 50, o sea entre 0 y menos 50 208 00:10:36,080 --> 00:10:37,559 habrá que mostrar el mensaje 209 00:10:37,559 --> 00:10:40,320 aviso saldo negativo 210 00:10:40,320 --> 00:10:44,139 entonces aquí, si el saldo es menor que 0 211 00:10:44,139 --> 00:10:46,059 entonces aviso saldo negativo 212 00:10:46,059 --> 00:10:50,659 y luego, si el valor absoluto 213 00:10:50,659 --> 00:10:54,399 para eso importamos la librería mat 214 00:10:54,399 --> 00:11:00,039 si el valor absoluto de la cantidad que ha introducido el usuario es mayor de 215 00:11:00,039 --> 00:11:04,120 avisar a hacienda que decir si alguien quiere sacar algo menos de tres mil 216 00:11:04,120 --> 00:11:08,500 euros o sea un importe una retirada superior a tres mil euros también se 217 00:11:08,500 --> 00:11:13,159 avisaría hacienda y fijaros que se imprime ese mensaje por notificar a 218 00:11:13,159 --> 00:11:18,460 hacienda y en este caso cuando voy termino cuando yo aquí lo que tengo que 219 00:11:18,460 --> 00:11:22,399 hacer es un retur tú porque eso quiere decir que todo ha ido bien el retur 220 00:11:22,399 --> 00:11:33,480 Retour false solo lo hago aquí, cuando intento sacar dinero que supera por debajo el saldo 221 00:11:33,480 --> 00:11:34,480 mínimo. 222 00:11:34,480 --> 00:11:35,480 Aquí hago un retour false. 223 00:11:35,480 --> 00:11:38,399 Con eso hemos visto cómo funciona el operar. 224 00:11:38,399 --> 00:11:45,519 Le devuelvo un boolean, lo que he dicho, de false o true se ha podido operar. 225 00:11:45,519 --> 00:11:58,580 tengo una función que realmente no me gusta porque dice que no debería sacar nada por 226 00:11:58,580 --> 00:12:05,460 pantalla y está imprimiendo los datos por pantalla. Lo lógico hubiera sido que en vez 227 00:12:05,460 --> 00:12:10,879 de hacer estas funciones lo imprimiera en la cuenta bancaria, perdón, lo imprimiera 228 00:12:10,879 --> 00:12:14,500 en el banco, que es lo que he hecho yo. Pero las he dejado aquí porque me parece que está 229 00:12:14,500 --> 00:12:18,980 bien hecho el hecho que fijaros tiene una función que es imprimir que imprime 230 00:12:18,980 --> 00:12:24,279 tanto los datos como los movimientos entonces tiene dos subfunciones o dos 231 00:12:24,279 --> 00:12:29,240 métodos que imprimen los datos e imprime los movimientos con esto termina la 232 00:12:29,240 --> 00:12:35,500 cuenta bancaria me voy al banco este es el banco 233 00:12:35,500 --> 00:12:39,799 utiliza el escáner fijaros que la anterior no utilizaba el escáner y el 234 00:12:39,799 --> 00:12:45,740 de Railis. Esta es una versión que he cambiado yo respecto al que tenía originalmente. Tengo 235 00:12:45,740 --> 00:12:52,259 aquí un punto, estoy haciendo pruebas. Lo primero que hace es crear el scanner y dos 236 00:12:52,259 --> 00:12:59,600 variables, una para guardar el IBAN y la titular. Y simplemente hago un do while mientras el 237 00:12:59,600 --> 00:13:05,419 valor que me está introduciendo el usuario no sea válido. Entonces le pido que me introduzca 238 00:13:05,419 --> 00:13:07,519 al IBAN y guardo 239 00:13:07,519 --> 00:13:09,299 en el IBAN lo que introduzca 240 00:13:09,299 --> 00:13:10,860 por el escáner en NextLine 241 00:13:10,860 --> 00:13:13,240 ahora que hago un while en el que 242 00:13:13,240 --> 00:13:15,059 la condición es que estoy llamando 243 00:13:15,059 --> 00:13:16,860 a cuenta bancaria 244 00:13:16,860 --> 00:13:18,539 a la clase cuenta bancaria 245 00:13:18,539 --> 00:13:21,440 al método es válido IBAN 246 00:13:21,440 --> 00:13:23,379 con el valor IBAN que me ha dado 247 00:13:23,379 --> 00:13:24,059 el usuario 248 00:13:24,059 --> 00:13:26,700 si os dais cuenta no he creado un objeto 249 00:13:26,700 --> 00:13:28,899 estoy llamando a la clase y le estoy 250 00:13:28,899 --> 00:13:31,340 negando lo que me responda 251 00:13:31,340 --> 00:13:33,440 porque cuenta bancaria es válido IBAN 252 00:13:33,440 --> 00:13:34,320 devuelve true 253 00:13:34,320 --> 00:13:37,500 si es válido y false si no es válido 254 00:13:37,500 --> 00:13:39,360 y yo mientras no sea válido 255 00:13:39,360 --> 00:13:41,000 así que por eso le pongo la negación 256 00:13:41,000 --> 00:13:43,179 mientras no sea válido 257 00:13:43,179 --> 00:13:44,679 sigo dando vueltas aquí 258 00:13:44,679 --> 00:13:47,360 hasta que el usuario me introduce un IVAN 259 00:13:47,360 --> 00:13:49,559 correcto y aquí hago lo mismo 260 00:13:49,559 --> 00:13:51,659 para introducir 261 00:13:51,659 --> 00:13:53,700 el titular de la cuenta 262 00:13:53,700 --> 00:13:54,759 y mientras me 263 00:13:54,759 --> 00:13:57,480 me introduzca 264 00:13:57,480 --> 00:13:59,340 un titular que no 265 00:13:59,340 --> 00:14:01,019 es válido, por eso lo niego 266 00:14:01,019 --> 00:14:03,039 voy muy acelerada 267 00:14:03,039 --> 00:14:05,519 voy a seguir dando vueltas 268 00:14:05,519 --> 00:14:06,019 entonces 269 00:14:06,019 --> 00:14:08,879 mientras no sea válido me pide 270 00:14:08,879 --> 00:14:10,700 el IVAN y el titular 271 00:14:10,700 --> 00:14:13,600 y luego ya sí 272 00:14:13,600 --> 00:14:14,379 creo la cuenta 273 00:14:14,379 --> 00:14:16,700 porque en el enunciado me decía que no creara la cuenta 274 00:14:16,700 --> 00:14:18,419 hasta que no fuera válido 275 00:14:18,419 --> 00:14:21,179 tengo una opción 276 00:14:21,179 --> 00:14:22,519 y una 277 00:14:22,519 --> 00:14:24,179 cantidad 278 00:14:24,179 --> 00:14:26,980 no he creado una función 279 00:14:26,980 --> 00:14:27,779 para el menú 280 00:14:27,779 --> 00:14:30,299 simplemente hace un do 281 00:14:30,299 --> 00:14:31,659 imprime las opciones 282 00:14:31,659 --> 00:14:34,720 y lee el teclado la opción 283 00:14:34,720 --> 00:14:38,139 y en el caso de que la opción sea la 1 284 00:14:38,139 --> 00:14:39,200 imprime los datos 285 00:14:39,200 --> 00:14:43,980 y en el caso de que sea 2, 3 o 4 286 00:14:43,980 --> 00:14:47,500 simplemente pone IVAN, titular, saldo y el valor 287 00:14:47,500 --> 00:14:50,960 esto creo que es lo que habría que haber hecho 288 00:14:50,960 --> 00:14:53,559 porque no me gusta, no cumple esto 289 00:14:53,559 --> 00:14:56,179 lo que he dicho, la función imprimir datos 290 00:14:56,179 --> 00:15:01,240 no cumple esta condición del enunciado 291 00:15:01,240 --> 00:15:04,240 que dice la única salida por pantalla 292 00:15:04,240 --> 00:15:07,399 son los dos mensajes permitidos 293 00:15:07,399 --> 00:15:08,980 para la clase cuenta bancaria 294 00:15:08,980 --> 00:15:11,600 entonces a mí esta función en primeros datos no me gusta 295 00:15:11,600 --> 00:15:14,000 entonces en los siguientes 296 00:15:14,000 --> 00:15:15,620 en el 2, en el 3 y en el 4 297 00:15:15,620 --> 00:15:17,120 lo hago yo directamente 298 00:15:17,120 --> 00:15:20,080 con cuenta Gettivan y con cuenta Gettitular 299 00:15:20,080 --> 00:15:22,960 que es lo que debería haberse hecho en esta primera opción 300 00:15:22,960 --> 00:15:24,820 y lo mismo para Gettzaldo 301 00:15:24,820 --> 00:15:26,580 vale, fijaros aquí 302 00:15:26,580 --> 00:15:28,799 lo que ocurre cuando elijo la opción 5 303 00:15:28,799 --> 00:15:29,480 ingreso 304 00:15:29,480 --> 00:15:42,139 Le digo, inserte la cantidad de ingresar, lee un doble y llama al objeto cuenta y al método ingresar. 305 00:15:42,779 --> 00:15:44,639 Entonces, eso devuelve un true o un false. 306 00:15:44,820 --> 00:15:51,720 Entonces, si ha ido bien, el usuario, o sea, perdón, la cuenta va, el gestor del banco, el Dow Bank, escribe ingreso OK. 307 00:15:52,100 --> 00:15:54,879 En otro caso, escribe ingreso de error. 308 00:15:55,240 --> 00:15:59,120 Luego tenemos lo mismo para cuenta retirar. 309 00:15:59,120 --> 00:16:01,600 hace exactamente lo mismo 310 00:16:01,600 --> 00:16:04,559 simplemente cuenta.retirar 311 00:16:04,559 --> 00:16:05,940 y el valor 312 00:16:05,940 --> 00:16:08,639 y en el caso 7 313 00:16:08,639 --> 00:16:09,899 que lo he modificado 314 00:16:09,899 --> 00:16:11,080 que esta es mi solución 315 00:16:11,080 --> 00:16:15,019 tengo una variable 316 00:16:15,019 --> 00:16:17,080 movimientos donde guarda 317 00:16:17,080 --> 00:16:17,860 un ArrayList 318 00:16:17,860 --> 00:16:20,759 y le pido los movimientos 319 00:16:20,759 --> 00:16:22,759 de la cuenta bancaria 320 00:16:22,759 --> 00:16:24,659 y simplemente 321 00:16:24,659 --> 00:16:26,679 hace una 322 00:16:26,679 --> 00:16:29,320 iteración de todos esos movimientos 323 00:16:29,320 --> 00:16:30,519 no he utilizado un iterador 324 00:16:30,519 --> 00:16:31,940 simplemente me he ido moviendo 325 00:16:31,940 --> 00:16:34,399 con un index 326 00:16:34,399 --> 00:16:37,080 un i y me he ido moviendo del 0 327 00:16:37,080 --> 00:16:39,480 hasta el tamaño del array list 328 00:16:39,480 --> 00:16:40,980 y para cada movimiento 329 00:16:40,980 --> 00:16:43,860 simplemente escribo el número, la posición del movimiento 330 00:16:43,860 --> 00:16:45,440 y le pido 331 00:16:45,440 --> 00:16:46,659 el valor del movimiento 332 00:16:46,659 --> 00:16:48,419 con movimientos.get 333 00:16:48,419 --> 00:16:52,299 porque es un array 334 00:16:52,299 --> 00:16:54,720 y luego ya, gracias por usar la aplicación 335 00:16:54,720 --> 00:16:55,639 vale, vamos a probarlo 336 00:16:55,639 --> 00:17:28,680 Yo voy a introducir un IBAN que no es válido, que tiene por ejemplo un 5, dos letras y 22 337 00:17:28,680 --> 00:17:35,559 números. Entonces me vuelve a decir introduzca un número iban válido. Así hasta que le vuelvo a poner 338 00:17:35,559 --> 00:17:50,059 luego corto también me dice que no. Si solo tuviera números, 222 números, también me dice que no. Así que ya os enseño las expresiones regulares. 339 00:17:56,569 --> 00:18:04,789 Me he pasado, que estoy aquí como una loca. Ahí. Vale, el titular, si le metiera números, no le parece bien. 340 00:18:05,849 --> 00:18:15,069 Y ahora mismo, si yo imprimo el dato de la cuenta funciona, me dice quién es el IVAN, el titular y el saldo. 341 00:18:15,670 --> 00:18:22,390 El IVAN funciona, el titular también y el saldo ahora mismo es cero. 342 00:18:22,569 --> 00:18:24,930 Y los movimientos ahora mismo son cero. 343 00:18:25,130 --> 00:18:35,569 Si yo elijo retirar un número negativo, el siguiente sería un ingreso, la opción 5, ingreso. 344 00:18:35,569 --> 00:18:38,609 si yo le pongo un número negativo 345 00:18:38,609 --> 00:18:39,769 me va a decir que no 346 00:18:39,769 --> 00:18:41,009 me ha dicho error 347 00:18:41,009 --> 00:18:43,650 así que voy a volver a probar ingreso 348 00:18:43,650 --> 00:18:45,750 voy a ingresar 349 00:18:45,750 --> 00:18:48,250 3.001 euros 350 00:18:48,250 --> 00:18:49,509 y 351 00:18:49,509 --> 00:18:52,630 me dice notificar a Hacienda 352 00:18:52,630 --> 00:18:54,390 si yo ahora enseño el saldo 353 00:18:54,390 --> 00:18:56,309 efectivamente 354 00:18:56,309 --> 00:18:57,950 tengo los 3.001 euros 355 00:18:57,950 --> 00:19:00,309 voy a probar con una retirada 356 00:19:00,309 --> 00:19:02,069 si yo intento 357 00:19:02,069 --> 00:19:04,750 retirar más de 3.000 euros 358 00:19:04,750 --> 00:19:05,990 3001 359 00:19:05,990 --> 00:19:08,849 me ha dicho 360 00:19:08,849 --> 00:19:10,309 retirada ok 361 00:19:10,309 --> 00:19:12,150 y ha dicho notificar a Hacienda 362 00:19:12,150 --> 00:19:13,650 si yo ahora le enseño el saldo 363 00:19:13,650 --> 00:19:15,750 mi saldo es 0 364 00:19:15,750 --> 00:19:17,509 por eso no me ha dado un error de que sea 365 00:19:17,509 --> 00:19:19,750 negativo 366 00:19:19,750 --> 00:19:21,470 ni que me haya pasado del menos 50 367 00:19:21,470 --> 00:19:22,789 voy a hacer una retirada 368 00:19:22,789 --> 00:19:24,910 de 369 00:19:24,910 --> 00:19:26,809 45 370 00:19:26,809 --> 00:19:29,150 entonces me dice que ha podido retirar 371 00:19:29,150 --> 00:19:31,569 pero me avisa que ha habido un saldo 372 00:19:31,569 --> 00:19:32,710 negativo 373 00:19:32,710 --> 00:19:35,509 Y ahora voy a seguir retirando 374 00:19:35,509 --> 00:19:38,910 Y voy a tirar 10 375 00:19:38,910 --> 00:19:42,109 Y entonces me dice que no puedo retirarse 376 00:19:42,109 --> 00:19:43,329 Por superar el saldo mínimo 377 00:19:43,329 --> 00:19:44,450 Menos 50 378 00:19:44,450 --> 00:19:46,569 Y si ahora os enseño mis movimientos 379 00:19:46,569 --> 00:19:48,630 Pues tengo el de 3.001 380 00:19:48,630 --> 00:19:50,869 El de 3.001 de retirada 381 00:19:50,869 --> 00:19:53,170 Y el de 45 retirada 382 00:19:53,170 --> 00:19:54,170 Y mi saldo 383 00:19:54,170 --> 00:19:57,009 Ahora mismo estoy en menos 45 384 00:19:57,009 --> 00:19:58,309 Y si doy salir 385 00:19:58,309 --> 00:20:03,079 ¿Qué quería enseñaros? 386 00:20:03,079 --> 00:20:07,000 La cuenta bancaria, los patrones o expresiones regulares. 387 00:20:07,700 --> 00:20:09,460 Voy a hacer más pequeño esto. 388 00:20:10,339 --> 00:20:11,059 Cuenta bancaria. 389 00:20:16,319 --> 00:20:22,420 Hay uno que no he explicado suficiente, que son estos dos, los patrones regulares. 390 00:20:22,940 --> 00:20:26,420 He dicho que eran estáticas y por lo tanto los he podido usar sin tener un objeto, 391 00:20:26,619 --> 00:20:29,799 antes de crear el objeto cuenta, y que devuelven un boolean, 392 00:20:30,000 --> 00:20:33,319 y que me dicen si es válido el IVAN o no, y que reciben un string. 393 00:20:33,319 --> 00:20:34,400 Las dos funcionan igual. 394 00:20:34,579 --> 00:20:36,839 Ahora, ¿cómo funcionan? 395 00:20:40,339 --> 00:20:42,559 Yo voy a decir las clases. 396 00:20:43,200 --> 00:20:48,700 Cuando tengo una variable de tipo string, tiene un método que se llama matches. 397 00:20:49,200 --> 00:20:54,819 Entonces yo llamo a la variable punto y a su método matches y le doy una expresión regular, 398 00:20:55,099 --> 00:21:00,319 que es una colección o es un string en la que estoy indicando qué me voy a encontrar. 399 00:21:01,160 --> 00:21:05,980 Las expresiones regulares se pueden buscar por internet cómo funcionan 400 00:21:05,980 --> 00:21:09,359 y tengo preparadas tres páginas en las que hay expresiones regulares. 401 00:21:10,500 --> 00:21:11,940 Esta está muy bien explicada. 402 00:21:13,480 --> 00:21:19,799 Os hablo de las expresiones regulares y aquí vienen las expresiones más típicas. 403 00:21:20,220 --> 00:21:26,660 La primera que he usado yo es este símbolo, este sombrero, buscaré cómo se llama. 404 00:21:26,660 --> 00:21:33,480 entonces cuando se le pone por delante una expresión regular quiere decir que la expresión regular debería estar al principio de la línea 405 00:21:33,480 --> 00:21:40,579 y luego en cambio si está dentro de unos corchetes y varios caracteres 406 00:21:40,579 --> 00:21:50,779 querría decir que tiene que ser cualquier carácter excepto el A o el B o el C que están dentro de los corchetes 407 00:21:50,779 --> 00:21:54,640 el que yo estoy eligiendo fuera de corchetes está al principio 408 00:21:54,640 --> 00:22:04,720 Así que en mi NetBeans, aquí, lo que estoy diciendo es que lo que viene después, todo esto, tiene que estar al principio de la expresión regular. 409 00:22:05,160 --> 00:22:15,640 Por eso, al principio, cuando le he indicado que quería poner un titular que empezaba con números y luego tenía un número correcto, 410 00:22:16,900 --> 00:22:26,880 este, a ver si lo encuentro, lo estoy buscando, aquí, este titular. 411 00:22:26,880 --> 00:22:29,720 este titular que he marcado, que ahora veis 412 00:22:29,720 --> 00:22:31,460 tiene un 5 por delante 413 00:22:31,460 --> 00:22:32,940 pero luego el número es correcto 414 00:22:32,940 --> 00:22:35,759 pero no me valida el IVAN 415 00:22:35,759 --> 00:22:37,180 porque empieza con un 5 416 00:22:37,180 --> 00:22:38,759 que no forma parte del patrón 417 00:22:38,759 --> 00:22:40,700 entonces mi patrón es 418 00:22:40,700 --> 00:22:43,259 que vengan dos letras 419 00:22:43,259 --> 00:22:45,200 o sea, entre corchetes 420 00:22:45,200 --> 00:22:47,140 o una letra de la A a la Z 421 00:22:47,140 --> 00:22:49,539 minúscula o una letra de la A a la Z 422 00:22:49,539 --> 00:22:51,559 mayúscula y eso se repite 423 00:22:51,559 --> 00:22:53,180 dos veces, entre llaves 424 00:22:53,180 --> 00:22:55,640 me indica el número de ocurrencias de lo que viene antes 425 00:22:55,640 --> 00:22:56,599 entonces esto 426 00:22:56,599 --> 00:22:58,359 se repite dos veces 427 00:22:58,359 --> 00:23:00,500 luego vienen dígitos 428 00:23:00,500 --> 00:23:02,200 los dígitos se ponen con barra D 429 00:23:02,200 --> 00:23:05,079 pero para que Java no distinga la barra 430 00:23:05,079 --> 00:23:07,119 o sea, no reconozca la barra como un carácter 431 00:23:07,119 --> 00:23:08,920 se pone el carácter de escape 432 00:23:08,920 --> 00:23:10,279 que es la barra dos veces 433 00:23:10,279 --> 00:23:11,539 entonces barra, barra, D 434 00:23:11,539 --> 00:23:13,839 me está diciendo que quiero un dígito 435 00:23:13,839 --> 00:23:16,019 no una barra, sino un dígito 436 00:23:16,019 --> 00:23:18,799 vuelvo aquí para que lo veáis 437 00:23:18,799 --> 00:23:21,759 me viene el que he dicho 438 00:23:21,759 --> 00:23:24,259 luego entre corchetes las opciones 439 00:23:24,259 --> 00:23:27,720 aquí iría de la A a la D y del 1 al 7 440 00:23:27,720 --> 00:23:32,640 y aquí tenemos cualquier dígito 441 00:23:32,640 --> 00:23:35,339 del 0 al 9 442 00:23:35,339 --> 00:23:41,319 y como le he puesto entre llaves 443 00:23:41,319 --> 00:23:43,380 muy cerca, estoy hablando demasiado 444 00:23:43,380 --> 00:23:47,099 como le he puesto entre llaves 22 445 00:23:47,099 --> 00:23:50,539 estoy diciendo que quiero un dígito 22 veces 446 00:23:50,539 --> 00:23:54,200 así que tengo al principio de la línea dos letras 447 00:23:54,200 --> 00:23:56,000 y luego 22 dígitos 448 00:23:56,000 --> 00:23:58,720 y no debería venir nada más 449 00:23:58,720 --> 00:24:00,740 no sé si a lo mejor se me ha colado 450 00:24:00,740 --> 00:24:01,220 poner 451 00:24:01,220 --> 00:24:04,059 algo para limitarlo 452 00:24:04,059 --> 00:24:06,359 y luego el titular 453 00:24:06,359 --> 00:24:08,019 funciona muy parecido, tengo 454 00:24:08,019 --> 00:24:09,599 una letra 455 00:24:09,599 --> 00:24:12,839 mínimo una o más 456 00:24:12,839 --> 00:24:14,680 letras y luego puedo 457 00:24:14,680 --> 00:24:16,880 tener aparte 458 00:24:16,880 --> 00:24:18,400 esto es una letra 459 00:24:18,400 --> 00:24:20,099 y luego puedo tener 460 00:24:20,099 --> 00:24:22,799 todas las letras y espacios que yo 461 00:24:22,799 --> 00:24:24,160 que yo quiera 462 00:24:24,160 --> 00:24:26,960 era una manera de asegurarme que al principio venían letras 463 00:24:26,960 --> 00:24:29,579 por eso no me ha dejado introducir un número 464 00:24:29,579 --> 00:24:31,200 estos son patrones regulares 465 00:24:31,200 --> 00:24:35,000 aquí estoy viendo en una de las páginas 466 00:24:35,000 --> 00:24:38,099 por ejemplo el más quiere decir 467 00:24:38,099 --> 00:24:41,720 que ocurre una o más veces 468 00:24:41,720 --> 00:24:44,200 entre llaves lo que he explicado 469 00:24:44,200 --> 00:24:47,839 el número de veces que se repite la expresión anterior 470 00:24:47,839 --> 00:24:51,660 por ejemplo aquí viene que quiero un dígito tres veces 471 00:24:51,660 --> 00:24:59,660 Y insisto en que la doble barra es porque antes vienen otros caracteres y tiene que diferenciar entre la barra y los... 472 00:25:00,740 --> 00:25:05,420 O sea, que quieres una barra o que quieres un dígito que tiene realmente la barra. Por eso se ponen dos. 473 00:25:06,900 --> 00:25:13,019 Bien, aquí vienen diferentes ejemplos. También lo tenéis, por ejemplo, en V3Schools. 474 00:25:13,099 --> 00:25:20,420 Vienen las expresiones regulares, regular expressions, y explica lo mismo para qué vale cada uno de los caracteres. 475 00:25:20,420 --> 00:25:26,779 lo que he dicho el pequeño sombrero es al principio y el dólar es lo mismo para el 476 00:25:26,779 --> 00:25:36,079 final barra de paradígito barra s para espacio y más cosas y lo mismo lo tenéis en la página 477 00:25:36,079 --> 00:25:42,559 de java entonces este para la versión 7 pero ahora igual no ha cambiado fijaros la cantidad 478 00:25:42,559 --> 00:25:50,299 de expresiones regulares que hay no tenéis que recordarlas sino saber utilizarlas y vuelvo a 479 00:25:50,299 --> 00:26:00,319 que yo he usado. Al principio, cualquier tipo de letra, minúscula o mayúscula, son dos letras y 480 00:26:00,319 --> 00:26:08,059 luego 22 dígitos. Y creo que ya no tengo nada más que decir. Lo más importante para mí de este 481 00:26:08,059 --> 00:26:17,740 ejercicio es que tengo constantes estáticas para todos los objetos que son de la clase. 482 00:26:17,740 --> 00:26:19,980 static quiere decir que es de la clase 483 00:26:19,980 --> 00:26:21,720 y final que no se puede modificar 484 00:26:21,720 --> 00:26:23,819 que también tengo 485 00:26:23,819 --> 00:26:26,119 otros atributos que son 486 00:26:26,119 --> 00:26:27,700 solo final para que no los pueda 487 00:26:27,700 --> 00:26:29,460 modificar cada uno de los objetos 488 00:26:29,460 --> 00:26:31,740 y que tengo dos métodos 489 00:26:31,740 --> 00:26:34,019 estos, que son estáticos 490 00:26:34,019 --> 00:26:35,559 quiere decir que no son de los objetos 491 00:26:35,559 --> 00:26:37,700 no se instancian, sino que son de la clase 492 00:26:37,700 --> 00:26:39,019 y 493 00:26:39,019 --> 00:26:40,880 menudo rollo 494 00:26:40,880 --> 00:26:41,880 hasta luego