Ayuda - Clase con BigInteger

P

Hola, soy nuevo en el mundo de java y tengo una duda acerca de crear una clase con BigInteger.

Programo con BlueJ, que es lo que nos han dicho en la universidad.

El código es el siguiente:

  
import java.math.BigInteger;
public class Clave { private BigInteger x; public Clave() { this.x=x; } public void setClave(BigInteger c) { this.x=c; }

Cuando ejecuto el método setClave me da un error de tipos incompatibles.

¿Alguien me podría ayudar?
Gracias

TeRRo90

#1 Por favor pega el error completo, de todas maneras en el contructor no le pasas el parametro a inicializar.

    public Clave()
    {
        this.x=x;
    }

debería ser:

public Clave(BigInteger x)
    {
        this.x=x;
    }
1 respuesta
P

#2

Poniéndolo así como tu dices, me da el mismo error, que es el siguiente: "Error:Incompatible types"

1 respuesta
atom

Creo que te hace falta mirar la API...
http://docs.oracle.com/javase/7/docs/api/

2 respuestas
P

#4

He estado mirándolo y no sé muy bien por donde cogerlo, si me pudieses dar más pistas...
Gracias

1 respuesta
TeRRo90

#3 Claro era lógico.

Bueno mira la asignación que haces en el setvalue no es de numeros si no de la posición de memoria donde reside this.x. Ejemplo:

En java cuando tu haces

Ejemplo 1:

int a = 5;
int b = a;

En este ejemplo b valdria 5 por que le estas asignando el valor del tipo primitivo de a que seria 5.

Ejemplo 2:

BigInteger a = new BigInteger("5);
BigInteger b = a;

En este ejemplo b apuntaría a la dirección de memoria donde esta alojado a de esta manera si realizas algún cambio en a también se propagaría, para poder evitar esto deberías clonar el objeto a. Te explico esto por que no se el nivel que tienes de programación en Java.

De todas maneras como te comentaron en la respuesta #4 léete la api de la clase BigInteger por que es una clase y no un tipo primitivo.

Para terminar estas seguro que necesitas utilizar la clase BigInteger?

2 respuestas
atom

#5 Para eso necesitamos más código.

#6 En principio no debería ser necesario copiarlo porque BigInteger es inmutable, por lo que no puedes modificar su valor inicial.

2 respuestas
P

#6 #7
Si, el enunciado es el siguiente:

Vamos a programar las siguientes clases sencillas, que nos servirán para la práctica del encriptador
asimétrico.

  • Clase Clave: representa a las claves públicas y privadas de los sistemas de encriptación
    asimétricos y viene representada por un BigInteger. Implementar el método de acceso getValor que
    devuelve el BigInteger e iniciar el valor en el constructor.

El resto de lo que mandan creo que si que se hacerlo, pero sin esta clase no puedo seguir, y la verdad que he probado de mil modos y no lo he sacado, si pudieseis ayudarme lo agradecería, mi nivel de java no es muy bueno como podreis observar

1 respuesta
atom

#8 Se puede modificar tu código para que haga lo que te pide el enunciado:

  • - inicializar el valor en el constructor

    • crear un método que devuelva ese valor
import java.math.BigInteger;
    
public class Clave { private BigInteger x; public Clave(BigInteger x) { this.x = x; } public BigInteger getValor() { return x; } }
1 respuesta
TeRRo90

#7 Si es verdad no había leido la api de BigInteger y es verdad es inmutable.

P

#9

Así es como lo tenía en un principio, pero al crear la Clave con BlueJ y asignarle un valor, me da el error de Incompatible types, por eso toda esta comedura de coco

1 respuesta
atom

#11 Pon el código que llama a la clase Clave, el error debe estar en la llamada al constructor.

#13 En algún sitio debes estar creando un objeto de la clase Clave llamando al constructor y también debes estar consultando el valor de la clave llamando al método getValor(). El error debe estar estar ahí.

1 respuesta
P

#12

Con BlueJ no es necesario llamar a la clase, se crea directamente desde el objeto, al menos eso me han explicado, no sé si estaré equivocado o no o no sé muy bien a que te refieres :s

#12
Desde la misma clase se puede llamar al constructor, he creado otras clases como punto, recta, plano y haciéndolo así no he tenido problema.
El problema es que al llamar al constructor de Clave e insertar el BigInteger me da el Incompatible types.

No tengo ni idea si lo que te estoy diciendo es correcto o no, pero con otras clases lo he hecho y me ha salido perfectamente

1 respuesta

Usuarios habituales