2012-04-28 4 views
0

사용자가 지정한 숫자까지 pi의 숫자를 인쇄하는 프로그램을 만들고 있습니다. 사용자로부터 입력을 읽을 수는 있지만 텍스트 파일을 읽을 수는 있지만 숫자를 인쇄하면 잘못된 번호가 인쇄됩니다.읽기 정수를 출력 할 수 없습니다 : java

"Pi.txt"에는 "3.14159"가 포함됩니다. 여기 내 코드입니다 :이 출력됩니다

package pireturner; 

    import java.io.*; 
    import java.util.Scanner; 

    class PiReturner { 

     static File file = new File("Pi.txt"); 
     static int count = 0; 

     public PiReturner() { 

     } 
     public static void readFile() { 
      try { 
       System.out.print("Enter number of digits you wish to print: "); 
       Scanner scanner = new Scanner(System.in); 
       BufferedReader reader = new BufferedReader(new FileReader(file)); 
       int numdigits = Integer.parseInt(scanner.nextLine()); 

       int i; 
       while((i = reader.read()) != -1) { 
        while(count != numdigits) { 
         System.out.print(i); 
         count++; 
        } 
       } 

      } catch (FileNotFoundException f) { 
       System.err.print(f); 
      } catch (IOException e) { 
       System.err.print(e); 
      } 
     }    

     public static void main(String[] args) { 
      PiReturner.readFile(); 
     } 
    } 

"515151"만약 그들이 인쇄 할 자리의 수와 사용자 입력 3. 왜 이런 일을하는지 모르겠다. 오류가없고 내가 읽는 방법을 테스트 했으므로 제대로 작동하지 않기 때문에 내가 뭘 잘못하고 있는지 확신 할 수 없다. 어떤 도움이라도 기꺼이 감사 할 것입니다. 미리 감사드립니다.

덧붙여서 char에 정수 'i'를 캐스팅하면 333이 출력됩니다 (입력이 3이라고 가정).

+0

... 출력 numdigit 시간 대신

 while (count != numdigits) { System.out.print(i); count++; } 

3 전에 왼쪽되지 않습니다. – Mesop

답변

0

귀하의 내부 루프는

int numdigits = Integer.parseInt (scanner.nextLine()); 
    // for the dot 
    if (numdigits > 1) 
     ++numdigits; 
    int i; 

    while ((i = reader.read()) != -1 && count != numdigits) { 
     System.out.print ((char) i); 
     count++; 
    } 
2

값 51은 문자 '3'의 유니 코드 코드 포인트 (및 ASCII 값)입니다.

대신 3을 표시하려면 51 당신이 그것을 인쇄하기 전에 charint 캐스팅해야합니다

System.out.print((char)i); 

당신은 또한 당신의 루프에 오류가 있습니다. 당신도 당신이 파일의 끝에 도달하면 중지 단일 루프를해야한다, 또는 숫자의 필요한 수에 도달하는 경우 :

while(((i = reader.read()) != -1) && (count < numdigits)) { 

그것은 당신의 코드는 숫자와 문자 .를 계산하지만, 자리가 아닙니다.

+0

고맙습니다. 그러나 그 내용은 "333"입니다. 왜 그런 일이 일어 났는지 알겠습니까? –

+0

좋습니다. 나는 당신의 루프에서 작동하도록했습니다, 나는 단순히 "including '3'을 추가 할 것입니다. "질문에. 앞으로 나는 '3'을 제거하는 방법을 알아낼 것입니다. (당신이 이미 알기를 원하지 않는 한). 많은 감사합니다, 이것은 오랫동안 나를 괴롭 혔습니다. –

0

파일에서 '-3'(Mark Byers가 지적한대로 문자 코드 51) 한 문자 만 읽은 다음 3 번 인쇄합니다.

 int i; 
    while((count < numdigits) && ((i = reader.read()) != -1)) { 
     System.out.print((char)i); 
     count++; 
    } 

사용자들은 파이의 4 자리 숫자를 원하는 말한다면

, 당신은 3.14 또는 3.141를 인쇄하려는거야?

위의 코드는 4 자이기 때문에 3.14을 4로 인쇄합니다. 문제는, 당신이해야 플래그를 허용 대답을 해결하는 경우

관련 문제