0

我正在创建一个程序,它将打印出 pi 的数字,直到用户指定的数字。我可以读取用户的输入,我可以读取文本文件,但是当我打印位数时,它会打印出错误的数字。

“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();
        }
    }

如果用户输入 3 作为他们希望打印的位数,这将打印出“515151”。我不知道为什么会这样,我也不确定我做错了什么,因为没有错误,而且我已经测试了阅读方法并且工作正常。任何帮助将不胜感激。提前致谢。

顺便说一句,将整数 'i' 转换为 char 将打印出 333(假设输入为 3)。

4

3 回答 3

2

值 51 是字符 的 Unicode 代码点(和 ASCII 值)'3'

要显示3而不是51您需要在打印之前将其int转换为:char

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

您的循环中也有错误。如果到达文件末尾或达到所需的位数,则应该有一个循环停止:

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

您的代码还将字符计.为数字,但它不是数字。

于 2012-04-28T09:34:03.093 回答
0

您只从文件中读取一个字符 - '3'(字符代码 51,正如 Mark Byers 指出的那样),然后打印 3 次。

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

如果用户说他们想要 4 位 pi,您打算打印3.14还是3.141

上面的代码将打印3.144 - 因为它是 4 个字符。

于 2012-04-28T09:46:06.527 回答
0

在输出 numdigit 乘以 3 之前,您的内部循环不会离开

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

反而 ...

    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++;
   }
于 2012-04-28T09:53:23.637 回答