Llevo ya casi un día atrapado en el mismo punto, en la validación de la matricula y veo que no salgo de ahí, y tengo de fecha limite hasta el 23, si alguien pudiese echarme una ayuda, el ejercicio es lo siguiente

Realizar un proyecto Java en el Entorno Netbeans que simule el funcionamiento de un parquímetro de la Zona Azul. Se considerarán las siguientes circunstancias:

  • El tiempo máximo de estancia será de 2 horas. No se admitirán monedas por un importe superior al que corresponde a ese tiempo máximo.

  • El coste por minuto es de 0’015€.

Se basarán en dos clases:

a) Parquimetro

b) UsoParquimetro

La clase Parquimetro asumirá la responsabilidad de ofrecer la funcionalidad básica del parquímetro, teniendo entre otras misiones detectar los posibles errores que se pueda producir en la introducción de la matrícula y en el intento de introducir monedas que correspondan un tiempo de estacionamiento superior al máximo permitido de 2 horas.

Estas situaciones provocarán el correspondiente lanzamiento de excepciones desde la clase Parquimetro que serán recogidas y gestionadas en la clase UsoParquimetro.

En el momento de introducir la matrícula se comprobará:

1) Que el número de caracteres sea 7.

2) Que los cuatro primeros son dígitos numéricos.

3) Que los tres últimos son letras.

La figura adjunta muestra uno de los casos:

Toda la entrada/salida por consola se deberá realizar exclusivamente en la clase UsoParquimetro. Es decir NO se permitirá ninguna instrucción de entrada/salida en la clase Parquimetro.

La impresión del recibo contendrá el valor de la matrícula introducida así como la hora máxima de estacionamiento. Para poder calcular este último dato se deberá hacer uso de la clase de biblioteca GregorianCalendar.

Una muestra es la que aparece a continuación:

Si la cantidad monetaria introducida es superior a la que correspondería a una estancia máxima de 2 horas, el programa debería responder tal como se muestra en la siguiente figura:

la validación la estoy haciendo dentro del try, en el anterior ejercicio también me pasó que me atasque en la gestión de errores, llevo esto...

package usoparquimetro;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Cristian Fernández Moreno
 */
public class UsoParquimetro {
    /**
     * @param args the command line arguments
     */
    
/*class Parquimetro{
}*/
public static String matricula; public static void main(String[] args) { Scanner entrada = new Scanner(System.in); try{ System.out.println("Parquimetro de monedas"); System.out.println("Siga atentamente las intrucciones"); System.out.print("Introducir Matricula: "); matricula = entrada.next(); Pattern pat = Pattern.compile("((\\d{4})([A-Z]{3}))"); Matcher mat = pat.matcher(matricula);
System.out.println("Prueba"); } catch (Exception e){ System.out.println("Error"); } }
}

QUE SE NOTE EL SOBRESALTO DEL SYSTEM.OUT.....("Prueba"); porque de ahi no paso, esto que tengo no me da el error y me sale el mensaje de error, y me estoy desesperando ya de tanto pensar... y la duda es si lo siguiente de las monedas se haría con una estructura repetitiva while?

Lo llevas bien, ahora que tienes el objeto Matcher tienes que usar el método que devuelve las ocurrencias para saber si la matrícula introducida es correcta, te lo he puesto con el texto que aparece en las capturas:

            Matcher mat = pat.matcher(matricula);

        if(!mat.matches())
            System.out.println("Letras de Matrícula incorrectas");

OJO que tu expresión regular solo acepta letras mayúsculas y creo que te piden que sean letras sin más, tendrías que cambiarla si quieres aceptar también minúsculas.

Yo usaría un while para las monedas.

un mes más tarde

Buenos días,
Yo estoy intentando realizar el mismo ejercicio, pero llega un momento donde me bloqueo:

package tareaCinco;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Parquimetro {
static String matricula;
static void checkmatricula (String matricula) throws Exception{
Pattern pat = Pattern.compile("((\d{4})([a-z]{3}))");
Matcher mat = pat.matcher(matricula);
if(!mat.matches()){
throw new Exception ("Matrícula incorrecta");
}
}
static int opcElegida;
static double SaldoAcumulado;
static double SaldoIntroducido;
static void checkMonedas (int opcElegida) throws Exception{
SaldoAcumulado=0.0;
while (opcElegida!=4){
switch (opcElegida){
case 1: SaldoIntroducido=100.0;
SaldoAcumulado+=SaldoIntroducido;
System.out.println("Saldo acumulado : " + SaldoAcumulado + " Céntimos de Euro" );
break;
case 2: SaldoIntroducido=20.0;
SaldoAcumulado+=SaldoIntroducido;
System.out.println("Saldo acumulado : " + SaldoAcumulado + " Céntimos de Euro" );
break;
case 3: SaldoIntroducido=10.0;
SaldoAcumulado+=SaldoIntroducido;
System.out.println("Saldo acumulado : " + SaldoAcumulado + " Céntimos de Euro" );
break;
case 4:
SaldoAcumulado+=SaldoIntroducido;
System.out.println("Saldo acumulado : " + SaldoAcumulado + " Céntimos de Euro" );
break;


    }
    if (SaldoAcumulado > 180){
        throw new Exception ("Saldo Excedido");
    }
}
}

}


package tareaCinco;

import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*

  • @author David Martin davidapuntes@hotmail.com
    */
    public class UsoParquimetro {
    public static void main (String [] args){
    try {
    System.out.println("Parquímetro de monedas");
    System.out.println("Siga atentamente las instrucciones");
    System.out.println("Introducir matrícula");
    Scanner scanner= new Scanner (System.in);
    String matriculaIntroducida= scanner.nextLine();
    Parquimetro.checkmatricula(matriculaIntroducida);}
    catch (Exception ex) {
    System.out.println("Matrícula no correcta");
    return;
    }
    System.out.println("Introduce monedas");
    System.out.println("1. Una moneda de 1 €");
    System.out.println("2. Una moneda de 20 Cent. de €");
    System.out.println("3. Una moneda de 10 Cent. de €");
    System.out.println("4. Dejar de introducir monedas");
    System.out.print("Elige Opción");
    Scanner scanner= new Scanner(System.in);
    int opcion = scanner.nextInt();
    try {
    Parquimetro.checkMonedas(opcion);
    } catch (Exception ex) {
    System.out.println("Saldo Excedido");}
    }



}


Obviamente el programa no es correcto...Pero estoy bastante bloqueado, sobre todo con el tema del loop que habría que hacer para que cada vez que introduzcas monedas, te calcule el saldo, y de nuevo te ofrezca las mismas opciones...

Agradecería sus opiniones.
Gracias