0

ユーザーが指定した数までの円周率を出力するプログラムを作成しています。ユーザーからの入力を読み取ることはできますが、テキスト ファイルを読み取ることはできますが、桁数を出力すると、間違った数値が出力されます。

「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の代わりに表示するには、印刷する前にto51をキャストする必要があります。intchar

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

ループにもエラーがあります。ファイルの終わりに達した場合、または必要な桁数に達した場合に停止する単一のループが必要です。

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

コードも文字.を数字としてカウントしますが、数字ではありません。

于 2012-04-28T09:34:03.093 に答える
0

ファイルから 1 文字 (Mark Byers が指摘しているように、文字コード 51) の '3' だけを読み取り、それを 3 回印刷します。

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

ユーザーが 4 桁の pi が必要だと言った場合、印刷するつもりですか3.14、それとも3.141?

上記のコードは 4 と出力さ3.14れます。これは 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 に答える