J'écris un programme Java pour faire des calculs sur de grands nombres premiers, je reçois cette erreur:Exception dans le thread « principal » java.lang.NumberFormatException: Pour chaîne d'entrée: « 1.0 »
Exception in thread "main" java.lang.NumberFormatException: For input string: "1.0" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492) at java.math.BigInteger.<init>(BigInteger.java:338) at java.math.BigInteger.<init>(BigInteger.java:476) at Solution.sumOfDivisorsModulo(Solution.java:24) at Solution.main(Solution.java:49)
public static BigInteger sumOfDivisorsModulo(BigInteger n){
BigInteger sum = (n.add(one)).mod(MODULO);
for (BigInteger test = n.subtract(one); test.compareTo(new BigInteger(Double.toString(Math.sqrt(n.longValue())))) >= 0; test.subtract(one))
{
if(n.mod(test).compareTo(zero) == 0)
{
sum = sum.add(test);
sum = sum.add(n.divide(test));
sum = sum.mod(MODULO);
}
}
return sum;
}
public static void main(String[] args) {
int m = 2;
int a = 0;
primeList = new BigInteger[m];
fillList(m); // fills the list primeList with prime number up to the mth
BigInteger n = new BigInteger("1");
for (int i = 0; i < m; i++){
n.multiply(primeList[i].pow(a+i));
}
System.out.println(sumOfDivisorsModulo(n).toString()); // base10
}
one
et zero
sont des variables définies comme BigInteger("0")
et BigInteger("1")
. Pouvez-vous m'aider à comprendre quel est le problème? Je vous remercie d'avance.
Pour moi, le message d'erreur 'NumberFormatException: Pour la chaîne d'entrée:" 1.0 "' est très clair, en particulier lorsque vous essayez de créer un 'BigInteger' avec une valeur _double_. Peut-être que vous vouliez utiliser 'BigDecimal'? – Seelenvirtuose
Pourquoi définir vos propres 'one' et' zero' quand ils sont intégrés? Voir ['BigInteger.ONE'] (https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html#ONE) et [' BigInteger.ZERO'] (https: // docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html#ZERO). – Andreas
En outre, vous savez que 'sum.add (test)' et 'sum.add (n.divide (test))' ne fera rien, non? Vous avez oublié d'affecter le résultat à "somme". Vous l'avez bien fait avec 'sum = sum.mod (MODULO)'. – Andreas