Möglich Verlustbehaftete Konvertierung von long zu int
Ich Wünsche eingeben int
und anderen long
ex: 1 und 1000000000, und jetzt möchte ich ein array erstellen, die der Größe 1000000000. Und dann an jedem index-array speichern int val, ex: arr[100000000] = 4
.
Wenn ich versuche, dies zu tun Netbeans zeigt mir einen Fehler in dieser Zeile:
arr = new long[y+1]` and `arr[j] = 0`
"Möglich Verlustbehaftete Konvertierung von long auf int".
Hier ist mein code:-
public static void main(String[] args) throws IOException
{
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
String[] xe = s.readLine().split(" ");
int x = Integer.parseInt(xe[0]);
long y = Long.parseLong(xe[1]);
long []arr;
arr = new long[y+1];
for(long j=0;j<=y;j++)
arr[j] = 4;
}
eine Milliarde gespeichert werden können als
int
als das limit ist ~2.1 Milliarden. Hinweis: eine Milliarde long
Werte verwendet 8 GB Speicher. Vielleicht ein Map<Integer, Long>
wird besser funktionieren, wenn Sie nur ein paar Werte setzen.InformationsquelleAutor ranaarjun | 2014-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Array-index ist ein integer in Java und der compiler beraten Sie. Also die maximale array-Größe (ungefähr)
Integer.MAX_VALUE
. Für größere arrays, die Sie verwenden sollten ArrayList.Gehen, um dieses von Schmutz&schnelle
Ein
ArrayList
speichert intern ein array, so wird es nicht zu halten ist eine größere Anzahl von Elementen.Ja, Sie können erleben, ein runntime error.
AFAIK ArrayList ist beschränkt durch den verfügbaren (JVM) Speicher.
Perfekt! Nie neue Java-arrays können
Integer.MAX_VALUE
Werte nur.InformationsquelleAutor PeterMmm
Sie brauchen, um zu konvertieren/casten y-und j-int.
Auch Ihre Inkrementieren var sollte nicht lange dauern, wenn Sie gerade hinzufügen 1.
InformationsquelleAutor Leo Pflug
Die Größe eines Arrays kann nur ein
int
. Das ist Sie, nicht erstellen von arrays, die größer als Integer.MAX_VALUE (2147483647), wahrscheinlich ein paar Elemente weniger (je nach VM). Können Sie werfen Ihren Wert zuint
aber das wird ungültige Ergebnisse erzeugen, wenn der Wert des
y
ist eigentlich größer als die maximal zulässige Größe.Dies ist nicht möglich ohne die eigenen Daten, Strukturen oder engagierte Bibliotheken, z.B. code.google.com/p/vanilla-java/wiki/HugeCollections (dies ist eine der ersten websearch-Ergebnisse - keine Empfehlung, nur ein Hinweis)
Okayee Herr..., vielen Dank.. @Makro
InformationsquelleAutor Marco13
Sie können nicht erstellen Sie ein array mit mehr als 2^31-1-Einträge, so sollten Sie eine
int
Wert, wenn Sie so tun (der compiler ist einfach nur warnen Sie, dass die Größe abgeschnitten vonlong
zuint
). 1000000000 ist klein genug, um passen inint
, so haben Sie grundsätzlich keinen Grund für die Verwendunglong y
um zu speichern diesen Wert in den ersten Platz.Laut deiner Beschreibung, das array selbst ist, die zum speichern
int
Werte, so dass es nicht brauchen, um ein array vonlong
Werte.Kurz gesagt, Sie können und sollte ändern sich jedes
long
im code zuint
.InformationsquelleAutor barak manos
Ich glaube, Sie haben einige Missverständnis in Bezug auf die Typisierung hier. In Java-down-casting ist erlaubt, wie bereits erwähnt, können Sie nach unten casten auf integer
Aber hier das Hauptproblem ist, dass die array-Zuordnung sollte dauert integer-Wert, so dass die gleiche Anzahl von homogenen Raum zugeordnet werden können.
Wenn Sie wollen mehr Platz als ein integer-Bereich, dann sollten Sie verwenden ArrayList ist dynamisch wachsen-in der Lage, Arrays, denn wenn wir so viel Haftung um einem Benutzer zu erklären, eine große Menge array-Speicher, dann ist unser system aus dem Speicher als ein array ist eine statische Zuweisung von Speicher-Daten-Struktur.
Das gleiche steht wahr, für
Sollte es sein:
InformationsquelleAutor AjayLohani