2014-11-05 3 views
-2

최대 100,000,000 정수를 생성하려면 다음 정수/문자열을 미리 정의 된 결합하려고합니다.최대 1 억 번 int 예외 발생

Example: predefined = 1010 Generated: gen = 5020315 Combined = 10105020315

그런 다음 해당 번호를 .txt 파일에 저장하십시오. 따라서 텍스트 파일에는 1 억 줄이 있어야합니다. 여기

내가 쓴 코드 :

import java.io.FileNotFoundException; 
import java.io.PrintWriter; 
import java.io.UnsupportedEncodingException; 

public class exec{ 

    public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException 
    { 
     int initial = 6618; 
     PrintWriter writer = new PrintWriter("variations.txt", "UTF-8"); 
     for(int a = 0; a < 100000000; a++){ 
      int a2 = Integer.parseInt(Integer.toString(initial) + Integer.toString(a)); 
      writer.println(a2); 
     } 
     writer.close(); 

    } 

} 

그러나 다음과 같은 오류가 발생합니다 :

Exception in thread "main" java.lang.NumberFormatException: For input string: "6618100000"

왜 이런 일이 않습니다를? 문제가 어디에 있습니까?

+1

예외는 어디에서 받습니까? – msrd0

+0

전체 스택 트레이스를 게시하십시오. int의 32 비트는 2147483648까지만 유효합니다.'long'이 필요합니다. – 9000

+0

구성된 숫자를 가져 와서 다시 정수로 변환하는 목적은 무엇입니까? 문제없이 문자열로 출력 할 수 있습니다. – Compass

답변

2

오래 필요하며 Long.parseLong();을 사용할 수 있습니다. int의 최대 값은 2^31-1로 길지만 길게는 2^63-1입니다.

+2

Long.parseLong()은 훌륭하게 작동했습니다. 감사. – arleitiss

2

a 값을 조합하면 int 변수에 보유하기에는 너무 큰 숫자가됩니다 (예 : 6618100000이 너무 커서 int 변수에 포함될 수 없습니다). int의 최대 값은 2^31-1입니다. 대신 Long.parseLong()을 사용할 수 있습니다.

2

구문 분석 할 때마다 문자열에서 만들 Integer가 Integer.MAX보다 작은 지 확인해야합니다.

Integer.MAX는 2147483647과 같으므로이 값보다 큰 값은 예외가됩니다.