Foros del Web » Programación para mayores de 30 ;) » Java »

Comparar una cadena para evitar excepcion

Estas en el tema de Comparar una cadena para evitar excepcion en el foro de Java en Foros del Web. Buenas tengo un problema con un ejercicio de persistencia de objetos aunque básicamente el problema reside en el control de variables... en evitar una excepción... ...
  #1 (permalink)  
Antiguo 02/06/2013, 17:33
Avatar de blittcer  
Fecha de Ingreso: noviembre-2007
Mensajes: 125
Antigüedad: 16 años, 5 meses
Puntos: 1
Comparar una cadena para evitar excepcion

Buenas tengo un problema con un ejercicio de persistencia de objetos aunque básicamente el problema reside en el control de variables... en evitar una excepción... comparar 2 cadenas...

Tenemos 2 archivos:

cuentas.txt -> (cuentas, saldo)

CUENTA1#1500
CUENTA2#3400
CUENTA3#2000

facturas.txt -> (cuentas, cargo/abono *, saldo)

CUENTA1@A@20
CUENTA1@C@20
CUENTA3@A@40
CUENTA2@C@50
CUENTA5@A@30

*un cargo es resta y un abono es suma

Problema 1: Necesito que cuando en facturas.txt se incluya una CUENTA5 por ejemplo que no existe en cuentas.txt. hacer un if comparando con un equals por ejemplo las cuentas y si no existe la cuenta haga un system.out.println diciéndolo, pero no termine el programa.

Problema 2: Evitar una lectura errónea, tipo XXXXX@XX o simplemente asndsadn1234, cualquier lectura que no mantenga las proporciones.

Hay varios métodos, hashmap, arraylist, etc. Aquí va el código...

Código Java:
Ver original
  1. public class Objetivo1 {
  2.     private static HashMap<String, Float> saldoCuenta = new HashMap<String, Float>();
  3.  
  4.     public static void main(String[] args) {
  5.         cargarCuentas();
  6.         mostrarCuentas("SALDOS INICIALES\n");
  7.         procesaFacturas();
  8.         mostrarCuentas("\nSALDOS FINALES\n");
  9.         System.out.println("\nfin objetivo1");
  10.     }
  11.  
  12.     private static void mostrarCuentas(String cabecera) {
  13.         System.out.println(cabecera);
  14.         Set<String> set = saldoCuenta.keySet();
  15.         Iterator<String> iter = set.iterator();
  16.         while (iter.hasNext()) {
  17.             Object cuenta = iter.next();
  18.             Object saldo = saldoCuenta.get(cuenta);
  19.             System.out.print(cuenta + " Saldo: " + saldo + " €\n");
  20.         }
  21.     }
  22.  
  23.     private static void procesaFacturas() {
  24.         try {
  25.             System.out.println("\nMOVIMIENTOS A LAS CUENTAS\n");
  26.             String linea;
  27.             BufferedReader fichero = new BufferedReader(new FileReader(
  28.                     "datos/Facturas2.txt"), 1024);
  29.             while ((linea = fichero.readLine()) != null) {
  30.                 String cuenta = (linea.split("@")[0]);
  31.                 String tipo = (linea.split("@")[1]);
  32.                 Float importe = Float.parseFloat(linea.split("@")[2]);
  33.                 Float saldoActual = saldoCuenta.get(cuenta);
  34.                 Float nuevoSaldo;
  35.  
  36.             if(tipo.compareTo("A") == 0 || tipo.compareTo("C") == 0) {
  37.                 if(tipo.compareTo("A") == 0) { // abono
  38.                     nuevoSaldo = saldoActual + importe;
  39.                     saldoCuenta.put(cuenta, nuevoSaldo);
  40.                     System.out.print(cuenta + " = " + tipo + ", " + importe + "\n");
  41.                 }  
  42.                 if(tipo.compareTo("C") == 0) {  // cargo
  43.                     nuevoSaldo = saldoActual - importe;
  44.                     saldoCuenta.put(cuenta, nuevoSaldo);
  45.                     System.out.print(cuenta + " = " + tipo + ", " + importe + "\n");
  46.                 }  
  47.             } else {
  48.                  System.out.println(cuenta + " = tipo de operación invalida, " + importe + "\n");}
  49.             }
  50.         } catch (NumberFormatException e) {
  51.             System.out.println("Formato del número invalido");
  52.         } catch (ArrayIndexOutOfBoundsException e) {
  53.             System.out.println("Valores cargados incorrectos");
  54.         } catch (IOException e) {
  55.             System.out.println("Fichero inexistente");
  56.         }
  57.     }
  58.  
  59.     private static void cargarCuentas() {
  60.         /*
  61.          * Método que lee el fichero de cuentas y lo carga en un HashMap
  62.          */
  63.         try {
  64.             String linea;
  65.             BufferedReader fichero = new BufferedReader(new FileReader(
  66.                     "datos/Cuentas2.txt"), 1024);
  67.             while ((linea = fichero.readLine()) != null) {
  68.                 String numCuenta = (linea.split("#")[0]);
  69.                 Float saldo = Float.parseFloat(linea.split("#")[1]);
  70.                 saldoCuenta.put(numCuenta, saldo);// se carga HashMap con saldos de cuentas
  71.             }
  72.             fichero.close();
  73.         } catch (NullPointerException e) {
  74.             System.out.println("Punto nulo NO FUNCIONA AÚN ni la captura");
  75.         } catch (NumberFormatException e) {
  76.             System.out.println("Formato del número invalido");
  77.         } catch (ArrayIndexOutOfBoundsException e) {
  78.             System.out.println("Valores cargados incorrectos");
  79.         } catch (FileNotFoundException e) {
  80.             System.out.println("Fichero inexistente");
  81.         } catch (IllegalArgumentException e) {
  82.             System.out.println("Capturada IllegalArgumentException");
  83.         } catch (IOException e) {
  84.             System.out.println("Capturada IOException");
  85.         }
  86.     }
  87. }
__________________
Si vas al Gimnasio y quieres conseguir buenos resultados: Fitness, Dietas y Entrenamientos

Última edición por blittcer; 02/06/2013 a las 17:55
  #2 (permalink)  
Antiguo 02/06/2013, 17:57
 
Fecha de Ingreso: diciembre-2011
Mensajes: 152
Antigüedad: 12 años, 4 meses
Puntos: 34
Respuesta: Comparar una cadena para evitar excepcion

Solo como dato, en java 8 puedes filtrarlo así:

Código Java:
Ver original
  1. BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
  2.  
  3. bufferedReader.lines().filter((s) -> s.matches("^\\w+#\\d+$")).forEach(System.out::println);
  #3 (permalink)  
Antiguo 02/06/2013, 18:20
Avatar de blittcer  
Fecha de Ingreso: noviembre-2007
Mensajes: 125
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Comparar una cadena para evitar excepcion

Se me ocurre que con un:

if(numCuenta.equals(cuenta)) { } else { System.out.print("La cuenta no existe \n");}

Pero algo no me funciona :(

Código Java:
Ver original
  1. public class Objetivo1B {
  2.     private static HashMap<String, Float> saldoCuenta = new HashMap<String, Float>();
  3.     private static String numCuenta;
  4.     public static void main(String[] args) {
  5.         cargarCuentas();
  6.         mostrarCuentas("SALDOS INICIALES\n");
  7.         procesaFacturas();
  8.         mostrarCuentas("\nSALDOS FINALES\n");
  9.         System.out.println("\nfin objetivo1");
  10.     }
  11.  
  12.     private static void mostrarCuentas(String cabecera) {
  13.         System.out.println(cabecera);
  14.         Set<String> set = saldoCuenta.keySet();
  15.         Iterator<String> iter = set.iterator();
  16.         while (iter.hasNext()) {
  17.             Object cuenta = iter.next();
  18.             Object saldo = saldoCuenta.get(cuenta);
  19.             System.out.print(cuenta + " Saldo: " + saldo + " €\n");
  20.         }
  21.     }
  22.    
  23.     private static void procesaFacturas() {
  24.         try {
  25.             System.out.println("\nMOVIMIENTOS A LAS CUENTAS\n");
  26.             String linea;
  27.             BufferedReader fichero = new BufferedReader(new FileReader(
  28.                     "datos/Facturas2.txt"), 1024);
  29.             while ((linea = fichero.readLine()) != null) {
  30.                 String cuenta = (linea.split("@")[0]);
  31.                 String tipo = (linea.split("@")[1]);
  32.                 Float importe = Float.parseFloat(linea.split("@")[2]);
  33.                 Float saldoActual = saldoCuenta.get(cuenta);
  34.                 Float nuevoSaldo;
  35.         if(numCuenta.equals(cuenta)) {
  36.             if(tipo.compareTo("A") == 0 || tipo.compareTo("C") == 0) {
  37.                 if(tipo.compareTo("A") == 0) { // abono
  38.                     nuevoSaldo = saldoActual + importe;
  39.                     saldoCuenta.put(cuenta, nuevoSaldo);
  40.                     System.out.print(cuenta + " = " + tipo + ", " + importe + "\n");
  41.                 }  
  42.                 if(tipo.compareTo("C") == 0) {  // cargo
  43.                     nuevoSaldo = saldoActual - importe;
  44.                     saldoCuenta.put(cuenta, nuevoSaldo);
  45.                     System.out.print(cuenta + " = " + tipo + ", " + importe + "\n");
  46.                 }  
  47.             } else {
  48.                  System.out.print(cuenta + " = tipo de operación invalida, " + importe + "\n");}
  49.         }else {
  50.              System.out.print("Cuenta no existe \n");}
  51.         }
  52.         } catch (NumberFormatException e) {
  53.             System.out.println("Formato del número invalido");
  54.         } catch (ArrayIndexOutOfBoundsException e) {
  55.             System.out.println("Valores cargados incorrectos");
  56.         } catch (IOException e) {
  57.             System.out.println("Fichero inexistente");
  58.         }
  59.     }
  60.  
  61.     private static void cargarCuentas() {
  62.         /*
  63.          * Método que lee el fichero de cuentas y lo carga en un HashMap
  64.          */
  65.         try {
  66.             String linea;
  67.             BufferedReader fichero = new BufferedReader(new FileReader(
  68.                     "datos/Cuentas2.txt"), 1024);
  69.             while ((linea = fichero.readLine()) != null) {
  70.                 numCuenta = (linea.split("#")[0]);
  71.                 Float saldo = Float.parseFloat(linea.split("#")[1]);
  72.                 saldoCuenta.put(numCuenta, saldo);// se carga HashMap con saldos
  73.                                                     // de cuentas
  74.             }
  75.             fichero.close();
  76.         } catch (NullPointerException e) {
  77.             System.out.println("Punto nulo NO FUNCIONA AÚN ni la captura");
  78.         } catch (NumberFormatException e) {
  79.             System.out.println("Formato del número invalido");
  80.         } catch (ArrayIndexOutOfBoundsException e) {
  81.             System.out.println("Valores cargados incorrectos");
  82.         } catch (FileNotFoundException e) {
  83.             System.out.println("Fichero inexistente");
  84.         } catch (IllegalArgumentException e) {
  85.             System.out.println("Capturada IllegalArgumentException");
  86.         } catch (IOException e) {
  87.             System.out.println("Capturada IOException");
  88.         }
  89.     }
  90. }
__________________
Si vas al Gimnasio y quieres conseguir buenos resultados: Fitness, Dietas y Entrenamientos
  #4 (permalink)  
Antiguo 04/06/2013, 05:00
Avatar de blittcer  
Fecha de Ingreso: noviembre-2007
Mensajes: 125
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Comparar una cadena para evitar excepcion

Cita:
Iniciado por LuisChavezB Ver Mensaje
Solo como dato, en java 8 puedes filtrarlo así:

Código Java:
Ver original
  1. BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
  2.  
  3. bufferedReader.lines().filter((s) -> s.matches("^\\w+#\\d+$")).forEach(System.out::println);
Era para un examen, gracias para marzo del 2014 me hubiese valido de algo...

Bueno ya logre solucionarlo, había que hacer

Código Java:
Ver original
  1. if(saldoCuenta.get(cuenta) != null) { ... } else { System.out.println("La factura no se puede cargar a la " + cuenta + " porque no existe."); }
__________________
Si vas al Gimnasio y quieres conseguir buenos resultados: Fitness, Dietas y Entrenamientos

Etiquetas: cadena, excepcion, persistencia, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:34.