2017-05-10 58 views
-1

我完全不熟悉java(我在cs第二學期,但我的第一個java)我一直在解決一些關於codeforces的問題,我來跨越一個要我比較大的字符串並打印「>」,「<」,「=」根據結果,它的工作在大多數情況下,除了當我進入一個巨大的字符串,這樣 「1460175633701201615285047975806206470993708143873675499262156511814213451040881275819636625899967479」java.lang.NumberFormatException當嘗試Integer.parseInt一個大字符串

我得到的錯誤是這樣的:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1460175633701201615285047975806206470993708143873675499262156511814213451040881275819636625899967479" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at Qs.Compare.main(Compare.java:13) 

這是我的代碼:

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
public static void main(String [] args) throws NumberFormatException, IOException 
{ 
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 
    long n = Integer.parseInt(bf.readLine()); 
    long m = Integer.parseInt(bf.readLine()); 
    String fileName = "file"; 
    PrintWriter writer = null; 
    try { 
     writer = new PrintWriter(fileName); 
    }catch(FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    if(n>m) 
     writer.print(">"); 
    else 
     if(n<m) 
      writer.print("<"); 
     else 
      if(n==m) 
       writer.print("="); 
    writer.close(); 

} 

我試着用作家的第一次,但我想知道我可以使用的是System.out.print這個問題? (這個問題指示這是不可取的)對不起,我知道這是一個非常愚蠢的問題,但我是新的x.x預先感謝^ _^

+1

使用的BigInteger不是int /長 –

+0

@Lashane好了,所以它應該是這樣'BigInteger的N = BigInteger.parseInt(bf.readLine() ); '? – Sorata

+0

https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html –

回答

0

您的輸入比Integer的長度大得多。在使用之前,您必須瞭解每種數據類型的長度。請參考data type

+0

好的非常感謝^^ – Sorata

0

它給出NumberFormatException例外的原因是因爲您嘗試存儲到long類型的數字太大。此外,請注意,您使用的是Integer.parseInt而不是Long.parseLong(這在某種程度上增加了NumberFormatException的原因)。除了那個小小的錯誤,鑑於String你試圖解析,即使你使用Long.parseLong,它也會再次拋出相同的異常。

你可以使用BigInteger完成任務:

BigInteger n = new BigInteger(bf.readLine()); 
BigInteger m = new BigInteger(bf.readLine()); 

if (n.compareTo(m) < 0) { 
    // do something 
}else if(n.compareTo(m) > 0){ 
    // do something 
}else{ 
    // do something 
} 
相關問題