2016-05-12 5 views
-2

Gelöst: Das Problem war, dass die Werte der Integer zu hoch waren und daher nicht in einem Int gespeichert werden konnte, sondern in einem BigInteger gespeichert werden musste.Eingabe aus Datei verweigert werden zu einem int/oder als int gelesen werden

Dieser Code soll Eingang von einer Datei lesen (siehe unten) und ich möchte, dass es als ein int oder analysiert zu einem int gelesen wird, wie ich in der Lage sein muss, Mathe darauf anzuwenden. Es löst immer die Ausnahme "InputMismatchException" aus. Ich habe viele andere Fragen und deren Lösungen gelesen und trotzdem ihre Lösungen mit wenig bis gar keinem Erfolg umgesetzt. Zu den Lösungen gehört das Parsen der Zeichenfolge als Int, das Entfernen von Leerzeichen mit "ReplaceAll".

Code:

String fileName = "SBOWorkSpace.txt"; 
Scanner sf = new Scanner(new File(fileName)); 

int lineint = sf.nextInt(); 
int finalnumbers = lineint * hour; 
System.out.println(finalnumbers + hournum); 

String linestring = sf.nextLine(); 
String nospaces = linestring.replaceAll("\\s+\\u00A0]+$", ""); 
int filetonumbers = Integer.parseInt(nospaces); 

Datei:

46886794368454912286794394376459086711 

Fehler:

Exception in thread "main" java.util.InputMismatchException: For input string: "46886794368454912286794394376459086711" 
at java.util.Scanner.nextInt(Scanner.java:2097) 
at java.util.Scanner.nextInt(Scanner.java:2050) 
at Encryption.main(Encryption.java:881) 
+0

Sie möchten dies als eine einzelne Nummer? –

+1

Zuallererst: Diese Ziffer ist viel zu groß für ein 'int', siehe [hier] (http://stackoverflow.com/questions/15004944/max-value-of-integer). Dann: drucke den Wert von 'nospaces'. Was bekommst du? – pzaenger

+0

@AbhishekPanjabi Ja, ich möchte, dass die Nummer in einer einzigen Variablen gespeichert werden kann. – Shadow

Antwort

3

Der Java class Integer hat einen Maximalwert, 2^31-1, die die 10- Stellenummer 2147483647. Die Nummer, die Sie in ein Intege eingeben möchten r hat 38 Dezimalziffern, , also ist es viel größer als die größte Zahl, die ein Integer halten kann, und Java läßt Sie es nicht in einen Integer setzen.

Sie können stattdessen versuchen, mit zu arbeiten. Zum Beispiel

BigInteger filetonumbers = new BigInteger(nospaces); 

Wenn Sie search SO for "biginteger" and "java", Sie viele Fragen und Antworten finden; einige davon sind irrelevant für Sie, aber einige andere diskutieren java.math.BigInteger und zeigen einige Beispiele für die Klasse in nicht-triviale Art und Weise verwendet wird.

+0

Vielen Dank, könnten Sie möglicherweise Geben Sie mir ein Beispiel für die Verwendung von BigInteger, lese ich den von Ihnen bereitgestellten Link durch und bin mir immer noch nicht sicher, wie ich ihn verwenden soll. – Shadow

+0

Sie können es nicht in ein primitiv wie mit 'parseInt' konvertieren; Sie müssten tatsächlich alle Ihre Zahlen (zumindest große) in BigInteger-Objekten speichern und die Funktionen erlernen, mit denen Sie mathematische Operationen mit ihnen durchführen können (zum Beispiel können Sie nicht '+' verwenden, um zwei hinzuzufügen BigIntegers, aber Sie können die Funktion 'add' verwenden. Ich habe einen weiteren Startlink zu der Antwort hinzugefügt. –

0

Die Länge eines int ist von - 2,147,483,648 to 2,147,483,647 und Sie großen Wert zuweisen, die über int Kapazität ist es ist auch groß von der Kapazität von langen Datentyp

+0

Ok danke, ich arbeite gerade daran, dies zu beheben – Shadow

0
at java.util.Scanner.nextInt(Scanner.java:2097) 

Vielleicht kann der Scanner nicht Ihre int analysieren Weil es zu groß ist, um ein Int zu sein?

Maximum value of an int32

+0

Danke, ich arbeite gerade an diesem Problem – Shadow

Verwandte Themen