无法打印读取的整数:java

无法打印读取的整数:java,java,methods,io,Java,Methods,Io,我正在创建一个程序,将打印出pi的数字,直到用户指定的数字。我可以从用户那里读取输入,我可以读取文本文件,但是当我打印数字时,它打印出了错误的数字 “Pi.txt”包含“3.14159”。 这是我的密码: package pireturner; import java.io.*; import java.util.Scanner; class PiReturner { static File file = new File("Pi.txt")

我正在创建一个程序,将打印出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”转换为字符将输出333(假设输入为3)。

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

要显示
3
而不是
51
,需要在打印前将
int
转换为
char

System.out.print((char)i);
循环中也有一个错误。如果到达文件末尾或达到所需的位数,则应该有一个循环,在此循环中停止:

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

您的代码也将字符
计算为一个数字,但它不是一个数字。

您只从文件中读取一个字符--“3”(Mark Byers指出的字符代码51),然后打印三次

     int i;
     while((count < numdigits) && ((i = reader.read()) != -1)) {
        System.out.print((char)i);
        count++;
     }
inti;
而((count
如果用户说他们想要4位数的pi,您是要打印
3.14
还是
3.141


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

在输出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++;
   }

谢谢,但那会打印出“333”。你知道为什么会出现这种情况吗?那太好了。我已经让它与你的循环一起工作了,我将在问题中简单地添加“包括'3'。以后我将研究如何消除'3'。(除非你已经知道并且愿意告诉我).非常感谢,这困扰了我很长时间。如果你的问题解决了,你应该标记接受的答案。