Como hacer que un programa echo en java evalúe si un numero es primo o compuesto

Me gustaría saber como realizar una operación con dos valores, uno Mayor y otro Menor que divididos entre si me den un numero primo o entero es decir como hacer para evaluar si el numero esta en el rango de primo o en el caso contrario que seria entero es decir como lo podría plantear, os dejo mi trocito de código... Aviso soy algo nuevo :c

private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {                                            
        float res=0;
        operador1=Float.valueOf(txtValor1.getText());
        operador2=Float.valueOf(txtValor2.getText());
        if () {
      } else{
      }
    }             

1 respuesta

Respuesta
1

No me ha quedado muy claro lo que buscas exactamente pero te intentaré ayudar.

Para saber si un número es entero o no puedes hacerlo determinando el valor de la "Mantissa":
https://es.wikipedia.org/wiki/Mantisa 

Y en caso de que la "Mantissa" sea 0 sabrás que este número es entero.

Para esto te puede venir genial pasar el número Float a bits y mirar la parte de la "Mantissa" ya mentada. Esto lo puedes hacer con la función Float. FloatToIntBits(numero) y haciendo una operación lógica AND con una máscara que la documentación de Java nos ofrece muy amablemente para extraer la "Mantissa" (0x007fffff):
https://docs.oracle.com/javase/7/docs/api/java/lang/Float.html#floatToIntBits(float) 
Te dejo un ejemplo que hice yo por mi cuenta:

private static int MASK = 0x007fffff;
private boolean isEntero (Float numero) {
    return (Float.floatToIntBits(numero) & MASK) == 0;
}

Es importante que el número sea de tipo "Float" en lugar de "float" ya que "float" es un tipo de datos "primitivo" mientras que "Float" tiene algunas funcionalidades interesantes como la de pasar a bits enteros.

Ahora bien, para saber si un número es Primo o no es un poco más complicado.

Una opción sería usar la expresión regular mágica:

".?|(..+?)\\1+"

Esta expresión regular la tienes muy bien explicada y con ejemplos en Java aquí:

https://iluxonchik.github.io/regular-expression-check-if-number-is-prime/ 

Aunque te dejo el código directamente por si no te interesa demasiado la explicación:

public static boolean isPrime(int n) {
    return !new String(new char[n]).matches(".?|(..+?)\\1+");
}

Veraz es que es un ejercicio en el cual el usuario Ingresar  dos valores uno mayor y uno menor es decir que en un textField ingresa al valor mayor y en otro textField el valor menor y al presionar el botón calcular lo que se debe hacer es calcular si el número es entero o primo imprimir de la pantalla si es entero o primo..

Pero lo que no tengo claro es como realizar el calculo porque el textField no es un valor bueno eso me dice el ide... 

En ese caso tienes dos números flotantes por lo que lo puedes solucionar bastante rápido con las funciones que te dejé en el comentario anterior de la siguiente manera:

private boolean isEntero (Float numero) {
    return (Float.floatToIntBits(numero) & MASK) == 0;
}
public static boolean isPrime(int n) {
    return !new String(new char[n]).matches(".?|(..+?)\\1+");
}
private void printEnteroOPrimo (Float operador1, Float operador2) {
    Float resultado = operador1 / operador2;
    if (isEntero(resultado)) {
        // Imprimir que el resultado es ENTERO
        System.out.println("El resultado es ENTERO");
    } else if (isPrime(Math.round(resultado))) {
        // Imprimir que el resultado es PRIMO
        System.out.println("El resultado es PRIMO");
    } else {
        System.out.println("El resultado no es ni ENTERO ni PRIMO");
    }
}

Ah, bueno, entonces la duda inicial es cómo extraer un valor de un JTextField.

Has hecho bien con el getText(). Esto te devuelve un String con el contenido del JTextField.

Además de esto debes usar Float.parseFloat(string) para obtener el número flotante asociado al texto extraído del JTextField. De esta forma tu código quedaría de la siguiente forma:

Float operador1=Float.parseFloat(txtValor1.getText());
Float operador2=Float.parseFloat(txtValor2.getText());

Y una vez tienes los valores ya empiezas a realizar los cálculos.

¡Gracias! En serio mil gracias me ayudo bastante

MASK

esta funcion en netbeans me aparece como ilegal como seria el reemplazo??

A que se debe el error con el mask

Si, disculpa, que no lo incluí en el último código.

MASK es una constante que se utiliza como una máscara de bits te pongo el valor de la máscara:

private static int MASK = 0x007fffff;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas