Programando en NetBeans, Calculadora.

Que tal comunidad, estoy adentrandome a la programacion en Java, quiero comentarles que el libro "Como programar en Java" 7a edicion esta muy completo.
Una pregunta no se si sea el foro correcto, tengo un problema con el desarrollo de una calculadora con funciones basicas.

El problema se encuentra en que de las 5 opciones todas funcionan bien pero si tecleo una opcion fuera de esa lista, es decir opcion 6 o 7 cuales quiera el programa solicita datos, en lugar de desplegar el mensaje de que seleccione una opcion entre 1 y 5.

Que me recomiendan o en donde creen que este el problema.

Anexo el codigo y cualquier apoyo se los agradezco.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package calculadora;
import javax.swing.JOptionPane;
/**
*
* @author */
class Calculadora{

float operacion (int operacion, float n1, float n2){
float resultado = 0f;
switch (operacion){
case 1:
resultado = n1+n2;
break;
case 2:
resultado = n1-n2;
break;
case 3:
resultado = n1*n2;
break;
case 4:
resultado = n1/n2;
break;
}
return resultado;
}
float operador(int a){
boolean datoOk = false;
String dato;
float operador =0f;
do{
try{
dato = JOptionPane.showInputDialog("Valor " + a);
operador = Float.parseFloat(dato);
}
catch(NumberFormatException ex){
JOptionPane.showMessageDialog(null,"Por favor entre un número válido");
}
} while (datoOk);
return operador;
}
}

public class Main {

public static void main(String[] args) {
Calculadora BasiCal = new Calculadora();
String [] tipoOperacion ={"+","-","*","/"};
int operacion = 0;
String dato;
String menu;
float num1=0f, num2=0f;
boolean salir = false;
menu = "Elige la operación deseada \n1.- SUMA\n2.- RESTA \n3.- MULTIPLICACION\n4.-DIVISION\n5.- SALIR";
while (!salir){
salir = false;
do {
try{
dato = JOptionPane.showInputDialog(menu);
operacion = Integer.parseInt(dato);
}
catch(NumberFormatException ex){
JOptionPane.showMessageDialog(null,"Proporciona un opcion entre 1 y 5.");
}
} while (operacion == 0);

if (operacion != 5){
num1 = BasiCal.operador(1);
num2 = BasiCal.operador(2);

JOptionPane.showMessageDialog(null, num1 + " " + tipoOperacion[operacion - 1] + " " + num2 + " = " +
+ BasiCal.operacion(operacion, num1, num2),"Calculadora Basica MR*",JOptionPane.PLAIN_MESSAGE);
}

else{
JOptionPane.showMessageDialog(null, "Calculadora Basica, Derechos Reservados", "Calculadora Basica RM*", JOptionPane.PLAIN_MESSAGE);
salir = true;
}
}
}

}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

complemento del error.

Este es el error que me envia.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at calculadora.Main.main(Main.java:85)
Java Result: 1

Imagen de JaimeItlzc

Condiciones if, else if, else

Pues solo cambia tus condiciones y listo:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package calculadora;
import javax.swing.JOptionPane;
/**
*
* @author */

class Calculadora{
float operacion (int operacion, float n1, float n2){
float resultado = 0f;
switch (operacion){
case 1:
resultado = n1+n2;
break;
case 2:
resultado = n1-n2;
break;
case 3:
resultado = n1*n2;
break;
case 4:
resultado = n1/n2;
break;
}
return resultado;
}

float operador(int a){
boolean datoOk = false;
String dato;
float operador =0f;
do{
try{
dato = JOptionPane.showInputDialog("Valor " + a);
operador = Float.parseFloat(dato);
}
catch(NumberFormatException ex){
JOptionPane.showMessageDialog(null,"Por favor entre un número válido");
}
} while (datoOk);
return operador;
}
}
public class Main {
public static void main(String[] args) {
Calculadora BasiCal = new Calculadora();
String [] tipoOperacion ={"+","-","*","/"};
int operacion = 0;
String dato;
String menu;
float num1=0f, num2=0f;
boolean salir = false;
menu = "Elige la operación deseada \n1.- SUMA\n2.- RESTA \n3.- MULTIPLICACION\n4.-DIVISION\n5.- SALIR";
while (!salir){
salir = false;
do {
try{
dato = JOptionPane.showInputDialog(menu);
operacion = Integer.parseInt(dato);
}
catch(NumberFormatException ex){
JOptionPane.showMessageDialog(null,"Proporciona un opcion entre 1 y 5.");
}
} while (operacion == 0);
if (operacion<=4){
num1 = BasiCal.operador(1);
num2 = BasiCal.operador(2);
JOptionPane.showMessageDialog(null, num1 + " " + tipoOperacion[operacion - 1] + " " + num2 + " = " +
+ BasiCal.operacion(operacion, num1, num2),"Calculadora Basica MR*",JOptionPane.PLAIN_MESSAGE);
}
else if(operacion>=6){
        JOptionPane.showMessageDialog(null,"Opción Invalida porfavor Asigne una correcta.. Gracias!");
        continue;
}
else{
JOptionPane.showMessageDialog(null, "Calculadora Basica, Derechos Reservados", "Calculadora Basica RM*", JOptionPane.PLAIN_MESSAGE);
salir = true;
         }
      }
   }
 }

prueba haciendo lo siguiente

cambia
if (operacion != 5){

por
if (operacion < 5){

y sustituye:

else{
JOptionPane.showMessageDialog(null, "Calculadora Basica, Derechos Reservados", "Calculadora Basica RM*", JOptionPane.PLAIN_MESSAGE);
salir = true;
}

con:

else{
 if (operacion == 5){
  JOptionPane.showMessageDialog(null, "Calculadora Basica, Derechos Reservados", "Calculadora Basica RM*", JOptionPane.PLAIN_MESSAGE);
  salir = true;
 }
 else{
   JOptionPane.showMessageDialog(null,"Opción Erronea, vuelve a elegir");
}
}

Espero te sirva, muchos saludos (ThoR)

Caso resuleto.

Gracias a ambos quedo resuelto cambiando los "if" y "else"

Excelente!!!!

Otro detalle en el codigo.

Que tal amigos, sobre este mismo codigo tengo otro detalle, al moemnto de correr el programa y seleccionas el cualquier caso, si por error entras un valor alfabetico en lugra de entrar un numerico, se envia el mensaje de error, hasta ahi esta bien, el problema es que no reincia el ciclo si no que se sigue y al entrar el segundo valor numerico este toma por default el valor "0" enviandote como resultado "0", me dicen que el error esta en el método operador, cuando se recibe un valor que no puede ser "parseado" a un Float, se sale del ciclo y hace la operación con un valor de 0 cuando deberia entrar de nuevo en el ciclo hasta que se tenga un valor correcto, el error se encuentra en que no se maneja adecuadamente la bandera datoOk.

Caules serian los cambios para solventarlo??
Gracias!!!