Parece que no puedo bloquear mi programa para obtener el error que quiero

Mi tarea dice que intentes y atrapes por esto:

  • Si el usuario no ingresa al menos 3 tokens
  • Si el usuario no ingresa números válidos para los tokens uno y tres.

Traté de investigarlo y parece que no puedo encontrar la excepción que pasaría por esto. Ahora mi excepción parece funcionar para los dos condicionales anteriores, pero mi instructor desea que tenga dos capturas, no una.

Quiero poder bloquear este programa para poder finalmente obtener otro lanzamiento y atrapar o modificar este programa para que la excepción atrape una cosa específicamente (como solo si el usuario no ingresa al menos 3 tokens).

Si intento hacer cualquiera de las cosas anteriores para bloquear este programa, por cierto, siempre me dará mi mensaje de error, por lo que parece que cubre las dos cosas que tengo arriba.

Mi excepción cubre las dos cosas que necesito atrapar, pero necesito dos capturas, no una.

import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Driver {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        StringTokenizer st;
        String input, tok1, tok2, tok3;
        double dtok1, dtok3;
        boolean loop = true;

        //input
        System.out.println("Simple calculator program");
        System.out.println("This program will only except a math expression with");
        System.out.println("2 operands and 1 operator. Exceptable operators");
        System.out.println("are +, -, *, /, and %. For example, 2*3 or 6%4.");
        while (loop) {
            System.out.print("\nplease enter an expression or q to quit: ");
            try {
                input = sc.next();

                if (input.equalsIgnoreCase("q")) {
                    loop = false;
                } else {
                    //calculations
                    st = new StringTokenizer(input,"+-*/%",true);
                    tok1 = st.nextToken();
                    tok2 = st.nextToken();
                    tok3 = st.nextToken();
                    dtok1 = Double.parseDouble(tok1);
                    dtok3 = Double.parseDouble(tok3);
                    System.out.println(input + "=" + 
                    singleExpression(dtok1,dtok3,tok2));
                }
            } catch (Exception NoSuchElementException) {
                System.out.println ("Error! Please enter 2 operands and 1 operator!");
            }
        }
    }

    static double singleExpression (double num1, double num2, String operator) {
        double output = 0.0;
        if (operator.equals("+")) {
            output = num1 + num2;
        } else if (operator.equals("-")) {
            output = num1 - num2;
        } else if (operator.equals("*")) {
            output = num1 * num2;
        } else if (operator.equals("/")) {
            output = num1 / num2;
        } else if (operator.equals("%")) {
            output = num1 % num2;
        } else {
            output = 0;
        }
        return output;
    }
}
Respuesta 1

Creo que estás usando la clase de excepción como el nombre de la variable, debería ser Class var.

La excepción atrapará cualquier cosa (tanto número como pocos elementos)

try{
..
}  catch (NoSuchElementException nse) {
    System.out.println ("Exception for the String Tokenizer");
}catch (NumberFormatException nfe) {
    System.out.println ("Exception for the Number format");
}
catch (Exception otherException) {
    System.out.println ( "Something else.. " + otherException.getMessage() );
}
Respuesta: 2

Tengo dos aplicaciones (programa clásico de Java y un lote) que tienen que tratarse entre sí. Para desacoplarlos tanto como sea posible la comunicación, estoy pensando en usar una cola entre ...

Tengo que hacer lo que se llama "Búsqueda de hipertexto" en mi aplicación. Básicamente, comienzas a escribir en un campo, y al igual que Google para cada letra que escribes, la búsqueda relevante coincide con los cambios. ...

A veces veo programadores que usan "afirmar", y otras veces veo una comprobación nula de parámetros y arroja Excepción. ¿Cuál es la mejor opción?

Fondo una troncal y una rama en un diseño estándar de svn, / trunk y / sucursales / prod de aproximadamente 20 módulos en el proyecto maven cuando quiero compilar troncal, simplemente escriba cd trunk; mvn paquete limpio. pero ...