Ich versuche, ein Array von BigIntegers zu erstellen, aber es scheint, dass das Array von ganzen Zahlen indiziert werden muss (und wenn das wahr ist, scheint das extrem dumm zu sein, aber ich ' Ich hoffe, ich verstehe nur etwas falsch. Was ich versuche ist die im Wesentlichen die folgenden:Wie man ein Array von BigIntegern durch BigIntegers indiziert
BigInteger totalChoiceFunctions = BigInteger.valueOf(50031545098999704);
BigInteger[][] choiceFunctions = new BigInteger[totalChoiceFunctions][36];
Aber dies bewirkt, dass die Fehlermeldung „Typenkonflikt: kann nicht von BigInteger konvertieren int“. Um dies zu beheben, habe ich versucht:
BigInteger[][] choiceFunctions = new BigInteger[totalChoiceFunctions.intValue()][36];
jedoch scheint dies nicht zu helfen. Wenn ich kompilieren und laufen erhalte ich den Laufzeitfehler von:
exception in thread 'main' java.lang.NegativeArraySizeException
Verwirrt schaute ich auf die Oracle-Dokumentation für die intValue() -Methode von BigInteger und festgestellt, dass „wenn diese BigInteger zu groß ist in einem int zu passen Es werden nur die niederwertigen 32 Bits zurückgegeben. Beachten Sie, dass diese Konvertierung Informationen über die Gesamtgröße des BigInteger-Werts sowie ein Ergebnis mit dem umgekehrten Vorzeichen verlieren kann ". Ich vermute, das ist, was passiert, wenn man bedenkt, dass 50031545098999704 sicherlich zu groß für int ist (und warum ich mich einem Array von BigIntegers zugewandt habe, da ich mein Array mit den Zahlen von 1 bis 50031545098999704 indexieren lassen möchte).
Wenn mein Verständnis richtig ist, dann:
BigInteger[][] chioceFunctions = new BigInteger[totalChoiceFunctions][36];
erzeugt ein Array, das speichert BigIntegers ist aber immer noch indiziert von ints. Wie kann ich ein Array erstellen, das von BigIntegers sowohl gespeichert als auch indiziert wird? Ist es möglich? Beachten Sie, dass der Code, den ich dafür verwende, in diesem Fall funktionieren kann, wenn ich Longs anstelle von Ints zum Indexieren verwende, aber ich möchte, dass er auf eine Größe skaliert, bei der ich von BigIntegers indexiert werden muss. Fehle ich etwas Offensichtliches?
Ich bin neugierig, warum das dumm scheint? Der Wert Ihres Index bestimmt nur die Nummer des Objekts, das Sie speichern können. Wenn Sie mehr speichern müssen, erstellen Sie Ihren eigenen Container ... – ChrisCM
Auch wenn Sie die Grenzen von Java-Arrays ignorieren, haben Sie nicht den Speicher für ein Array von 50 Billiarden mal 36 BigIntegern. – user2357112
Gee ow viel Speicher haben Sie brauchen mindestens '50031545098999704 * 64 * 36' –