2016-12-06 3 views
-1

내가 좋아하는 형식이 숫자가 .txt 파일이 다음문자열을 .txt 파일에서 double 형식으로 변환 하시겠습니까?

1.2 2.3 3.4 4.5 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0

나는 문자열로 각 행을 한 후 더블로 각 숫자를 변환하는 스캐너를 사용하기 위해 노력하고있어

이들을 함께 추가하여 새 .txt 파일로 인쇄하십시오. 내 오류 메시지는 다음과 같습니다

예외 스레드에서 "주요"java.lang.NumberFormatException의를 : 입력 문자열의 경우 : "1.2 2.3 3.4 4.5" sun.misc.FloatingDecimal.readJavaFormatString에서 (FloatingDecimal.java을 : 2043) at sun.misc.FloatingDecimal.parseDouble (FloatingDecimal.java:110) at java.lang.Double.parseDouble (Double.java:538) at scanstrings.ScanStrings.parseDouble (ScanStrings.java:51) at scanstrings.ScanStrings.main (ScanStrings.java:33)

나는 각각의 숫자를 분리하여 두배로 변환 할 수 있도록하려고했지만 아무 것도하지 않아도 아무 일도하지 않는 것처럼 보이고 공백과 마침표를 사용하여 분할하는 방법을 찾았지만 각각의 방법으로 리턴을 시도합니다 동일한 오류 메시지.

내 코드는 기본적으로 지금이 바로 보이는

(난 그냥 그냥 나쁜 경우에 나는 또한 그래서 일부 단지 의미

을하지 않을 수 있습니다 잠시 동안이 장난 봤는데, 미안 해요 이렇게 시작 해요 !에 StackOverflow에
//Construct Scanner object for the input file 
    Scanner input = new Scanner (new File("one.txt")); 

    //Construct Scanner object for the output file 
    PrintWriter output = new PrintWriter("result.txt"); 

    //Read lines from the input file 

    while(input.hasNextLine()){ 
     String line = input.nextLine(); 

     String[] conv = line.split("\\s+"); 
     String dub1 = conv[0]; 
     String dub2 = conv[1]; 
     String dub3 = conv[2]; 
     String dub4 = conv[3]; 


     //convert to double 
     double dub = parseDouble(line); 

     //compute sum 
     double total = 0; 
     if (dub != 0) //protect against division by zero 
     { 
      total += dub; 
     } 
     System.out.printf("\n", dub, total); 
    } 

    input.close(); 
    output.close();  
} 

public static double parseDouble(String conv) throws NumberFormatException{ 
    int i = 0; 
    while (!Character.isDigit(conv.charAt(i))) { i++; } 
    return Double.parseDouble(conv.substring(i).trim()); 
} 

답변

1

에 오신 것을 환영합니다

은 개별 용어로 라인을 분리했지만, 다음이 당신의 구문 분석에 전체 라인을 통과하고 있습니다 :

대신
double dub = parseDouble(line); 

시도 :

double dub = parseDouble(conv[0]); 

첫 번째 값입니다. (모든 값에 대해 루프를 만들 수도 있습니다.

+0

getSum(String line)에 루프의 이름을 변경해야합니다. 또한 프로그램에서 이것을 변경했으며 이제 실행되지만 인쇄 작성자와 함께 새 .txt 파일로 성공적으로 인쇄되지 않습니다. 나는 계속 노력할거야! – markersyou

+0

StackOverflow는 한 번에 한 가지 질문 만 할 때 가장 효과적입니다. 그러나, 도움이되기를 : 당신의 인쇄 문제는'output.printf' 대신에'System.out.printf'를 사용하는 데 있습니다. 더 많은 도움이 필요하면 PrintWriter에 관한 새로운 질문을하십시오. 이 질문과 답변은 귀하의 NFE 문제에 초점을 맞추어야합니다. – AJNeufeld

0

(필자가 입력 파일의 각 줄에 숫자를 추가하고 출력 파일의 새 줄에 인쇄하려는 경우) . 더 쉬운 방법은 문자열을 Double으로 변환하기 위해 Double.parseDouble(String)에 의지하는 것입니다. 당신의 parseDouble(line)

public static double parseDouble(String line){ 
    double res = 0; 
    for(String number : line.split("\\s+")){ 
     try{ 
       res += Double.parseDouble(number); 
     } 
     catch(NumberFormatException ex){ 
       System.out.println("Cannot convert " + number + " to double"); 
     } 
     finally{ 
       return res; 
     } 
    } 

의 새로운 버전은 그래서 그 경우에, 당신은 내가 정말이 작동하지 않습니다 수 있도록 당신의 parseDouble(String line)