2

DEITLE の本からの単純なプログラムは、5 つの整数を読み取り、プログラムはその数の隣接するアスタリスクを含む行を出力する必要があります.ie (num = 5 の場合、出力 *****) . 同じソリューションを c++ でテストしたところ、問題なく動作しました。それでも、ここではバッファが奇妙な値 (50 ?) を保持しています。問題は buffer の使用にあると思いますが、なぜこれが起こっているのか知りたいですか?

   /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;
import java.io.*;
import java.util.Date;
/**
 * Program that reads five numbers and print starts equal to each number 
 *
 * @author Hassan
 */
public class JavaApplication1 

{


    public static void main(String[] args) 
    {
       int num ; 
       java.io.InputStreamReader  ins= new InputStreamReader(System.in);
       java.io.BufferedReader bfr = new BufferedReader (ins);

       try
       {


       for(int i=0;i<5;i++)
       {
           System.out.println("Please Enter a number");

           num = bfr.read(); 

       System.out.print(num);


             for(int j=0;j<num;j++)
                {   System.out.print("* ");  }
                  System.out.println("\n");


       }    
       } 

       catch(Exception E )
       {System.out.println(E.getMessage());  }



    }
}

編集:問題は解決されましたが、プログラムは5つの入力のうち3つだけを読み取っています。つまり、入力を読み取り、次の入力を無視しています ここに画像の説明を入力

4

2 に答える 2

6

あなたはバイトを読んでいます、それはちょうど最初に利用可能な文字のASCII値になります。50はASCIIの「2」です。おそらく、テキストとして入力された数値を読み取って解析したいと思うでしょう。

readLine()の代わりにを使用read()して、にするStringと、を使用Integer.parseInt()して実際の値を取得できます。

于 2013-01-01T00:57:29.720 に答える
2

コードがコンパイルされません:

  1. //notを使用してコメントを書く\\
  2. 中かっこが整列していないため、混乱してエラーが発生する可能性があります
  3. コメントを書くときは、必ず新しい行の角かっこを閉じてください(そうでない場合はコメントの一部です)

これらの3つの問題を修正すると、プログラムが機能します。

更新
JasonDは正しいです、変更:

num = bfr.read();

に:

num = bfr.read()-48;

そしてそれは動作します。その理由は、文字を読んでいて、ASCIIで「0」が48、「1」が49などであるため、0〜9の範囲の入力を期待している場合は、48を引くと機能します。

9を超える数値を処理する場合はreadLine()、入力を使用して解析する必要がありますString

于 2013-01-01T00:55:00.513 に答える