Java - Error con BigInteger

 
Vista:
sin imagen de perfil

Error con BigInteger

Publicado por Lucho9964 (17 intervenciones) el 02/04/2020 22:41:44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Scanner;
import java.math.BigInteger;
 
public class Primos{
  public static void main(String args[]){
 
   Scanner usuario = new Scanner(System.in);
   BigInteger b;
   BigInteger c;
 
   System.out.println("********************************************************");
   System.out.println("*  Bienvenido al programa que le encuentra los primos  *\n*  de un rango que usted mismo determina               *");
   System.out.println("********************************************************");
 
   System.out.println("Digite el valor minimo del rango");
   b = usuario.nextBigInteger();
 
   System.out.println("Digite el valor maximo del rango");
   c = usuario.nextBigInteger();
 
   System.out.println("Los numeros primos que estan dentro de su rango son: ");
 
   while(b<=c){
    if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7!=0){
     System.out.print(b+" ");
   }
    b++;
  }
 }
}


*****************************************
* error: *
*****************************************


Primos.java:23: error: bad operand types for binary operator '<='
while(b<=c){
^
first type: BigInteger
second type: BigInteger
Primos.java:24: error: incomparable types: BigInteger and int
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
Primos.java:24: error: incomparable types: BigInteger and int
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
Primos.java:24: error: incomparable types: BigInteger and int
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
Primos.java:24: error: incomparable types: BigInteger and int
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
Primos.java:24: error: incomparable types: BigInteger and int
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
Primos.java:24: error: bad operand types for binary operator '%'
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
first type: BigInteger
second type: int
Primos.java:24: error: bad operand types for binary operator '%'
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
first type: BigInteger
second type: int
Primos.java:24: error: bad operand types for binary operator '%'
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
first type: BigInteger
second type: int
Primos.java:24: error: bad operand types for binary operator '%'
if(b==2 || b==3 || b==5 || b==7 || b!=1 && b%2!=0 && b%3!=0 && b%5!=0 && b%7
!=0){
^
first type: BigInteger
second type: int
Primos.java:27: error: bad operand type BigInteger for unary operator '++'
b++;
^
11 errors
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Error con BigInteger

Publicado por Kabuto (1381 intervenciones) el 03/04/2020 00:36:36
BigInteger no es un tipo de dato primitivo como int o double, por lo tanto, no puedes usar los comparadores primitivos.

BigInteger es un objeto, y para comparar has de usas sus propios métodos, en este caso, el método compareTo()

Este método devuelve -1 si el primer número es menor que el segundo, 0 si son iguales y 1 si es mayor.

Así pues, por ejemplo para cumplir la condición de tu bucle while
1
while(b<=c){
puedes hacerlo así:
1
while(b.compareTo(c) <= 0){

Mientras el método compareTo() esté devolviendo -1 ó 0 (es decir, un valor menor o igual a 0), significa que b está siendo menor o igual c.

Cambios similares tendrás que hacer en el resto del código donde estés comparando estos objetos.

Si no te queda claro, busca más ejemplos en la red.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error con BigInteger

Publicado por Lucho9964 (17 intervenciones) el 03/04/2020 01:00:24
Muchisimas gracias

Un abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error con BigInteger

Publicado por Lucho9964 (17 intervenciones) el 03/04/2020 03:30:02
men ya corregí mi código y me marca otro tipo de error


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.Scanner;
import java.math.BigInteger;
 
public class Primos{
public static void main(String args[]){
 
   Scanner usuario = new Scanner(System.in);
   BigInteger b;
   BigInteger c;
   BigInteger d = new BigInteger("1");
   BigInteger e = new BigInteger("2");
   BigInteger f = new BigInteger("3");
   BigInteger g = new BigInteger("5");
   BigInteger h = new BigInteger("7");
 
 
   System.out.println("********************************************************");
   System.out.println("*  Bienvenido al programa que le encuentra los primos  *\n*  de un rango que usted mismo determina               *");
   System.out.println("********************************************************");
 
   System.out.println("Digite el valor minimo del rango");
   b = usuario.nextBigInteger();
 
   System.out.println("Digite el valor maximo del rango");
   c = usuario.nextBigInteger();
 
   System.out.println("Los numeros primos que estan dentro de su rango son: ");
 
 
   while(b.compareTo(c)<=0){
   int i = b.compareTo(d);
   int j = b.compareTo(e);
   int k = b.compareTo(f);
   int l = b.compareTo(g);
   int m = b.compareTo(h);
 
 
    if(j==0 || k==0 || l==0 || m==0){
     System.out.print(b + " ");
   }else{
     e=b.mod(e);
     f=b.mod(f);
     g=b.mod(g);
     h=b.mod(h);
     i = e.compareTo(d);
     j = f.compareTo(d);
     k = g.compareTo(d);
     l = h.compareTo(d);
      if(i==0 && j>=0 && k>=0 && l>=0){
     System.out.print(b + " ");
    }else{
    }
   }
    b=b.add(d);
  }
 }
}

********
*error:*
********
El programa ejecuta todo, pero cuando le pongo un rango amplio me marca este error:

Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus not positive
at java.math.BigInteger.mod(Unknown Source)
at Primos.main(Primos.java:42)



solo muestra en pantalla los dos primeros numeros
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Error con BigInteger

Publicado por Kabuto (1381 intervenciones) el 03/04/2020 11:28:44
Tienes que diseñar otra lógica para tu programa.
En esta linea:
1
e=b.mod(e);

Estas diciendo que a e le vamos asignar el resultado de "b mod e".

Si yo al principio del programa le digo que el mínimo rango es 1.
Entonces b = 1.

Y e = 2 porque así se inicializa:
1
BigInteger e = new BigInteger("2");

Con estos valores iniciales:
b = 1
e = 2

..si hacemos
1
e=b.mod(e);

significa que
e = 1 mod 2;
Tras esa operación, ahora la e toma valor 1.
Y luego b se incrementa con la d que vale 1
1
b=b.add(d);

Se repite el bucle y tenemos estos valores
b = 2
e = 1

..repetimos la operacion
1
e=b.mod(e);

y significa que
e = 2 mod 1;

Ahora la e vale 0
b vuelve a incrementarse y se repite de nuevo el bucle. Y es entonces cuando se produce la excepción. porque tenemos estos valores:
b = 3
e = 0

Repito, la e vale 0. Y con valor 0 ó negativo no se puede hacer modulo
e = 3 mod 0;

Eso aritméticamente no es posible, por eso falla el programa.

Has de cambiar la lógica. Quizás los resultados de los mod no deberían asignarse a los objetos d, f ,g y h.

No lo sé, lo cierto es que no tengo claro que lógica estás siguiendo, nunca había hecho cálculos de primos de esta forma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar