我正在创建一个程序,将打印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)。
答案 0 :(得分:2)
值51是字符'3'
的Unicode代码点(和ASCII值)。
要显示3
而不是51
,您需要在打印之前将int
转换为char
:
System.out.print((char)i);
循环中也有错误。如果您到达文件末尾,或者达到所需的位数,您应该有一个循环停止:
while(((i = reader.read()) != -1) && (count < numdigits)) {
您的代码还将字符.
计为数字,但它不是数字。
答案 1 :(得分: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.14
为4 - 因为它是4个字符。
答案 2 :(得分:0)
在输出numdigit times 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++;
}