7

私はJavaの初心者であり、演習として、印刷するための簡単なプログラムをWAPする必要はありませんでした。ユーザーに応じた「*」文字の。しかし、どういうわけか、このコードの出力は常に似ています。

package stars;

public class Stars {

    public static void main(String[] args) {

        int no_stars=0;

        try {

            System.out.print("Enter the number of stars:");
            no_stars = (int)System.in.read();

        } catch ( Exception e)    {

            System.out.println("Error! Invalid argument!");
            System.out.println();

        } 

    printstars(no_stars);

    }
    public static void printstars(int n){
        int i;
        for(i=0;i<=n;i++)
        {    
             System.out.println('*');
        }

    }


}

「*」を i に置き換えると、ループを no_stars 回実行しても、50/52/54 までループすることがわかります。

ここで何が問題になっているようですか?

4

5 に答える 5

12

から受け取った数値を解析するSystem.in.read()か、代わりに整数として読み取る必要があります。現在はキャストするだけなので、5 を入力すると、0x35 回 (文字 '5' の値) が渡されます。

たとえば、次のことができます。

Scanner scan = new Scanner( System.in );
printstars( scan.nextInt() );
于 2013-06-13T17:59:00.477 に答える
5

ここで入力から文字のASCIIコードを読み取っているため:

no_stars = (int)System.in.read();

そのはず

no_stars = Integer.parseInt(Console.readLine());
于 2013-06-13T17:59:53.473 に答える
1

あなたのコードには 2 つの間違いがあります。


初め

System.in.read()

整数ではなくバイトを読み取っているため、整数を解析して最初のバイトを取得しています。


2番

for (i = 0; i <= n; i++) {

要求されたよりも常に星を 1 つ多く印刷します。したがって、次のように変更する必要があります

for (i = 0; i < n; i++) {

提案: Scanner を使用して整数を読み取ることができます。たとえば、

Scanner scanner = new Scanner(System.in);
no_stars = scanner.nextInt();
于 2013-06-13T18:02:13.733 に答える
1
no_stars = (int)System.in.read();

これは、ユーザーが入力した文字の ASCII 値を使用しています。代わりにこれを試してください:

no_stars = System.in.read() - '0';

または、no_stars変数をまとめて削除し、

printstars(System.in.read() - '0');

また、ループでは、正しい回数の反復を実行するためにfor、条件を にする必要があります。i < nまた、ループの外側で宣言する必要はありません。i実行するだけで済みますfor (int i = 0; i < n; i++)

于 2013-06-13T18:00:15.453 に答える
0

これが修正されたプログラムです: (主な問題はこの行でした //no_stars = (int)System.in.read();)

public static void main(String[] args) {

    int no_stars=0;
    try{
        System.out.print("Enter the number of stars:");
        Scanner sc=new Scanner(System.in);
        String name=sc.nextLine();
        no_stars = Integer.parseInt(name);
        //no_stars = (int)System.in.read();
    }
    catch ( Exception e)    {
        System.out.println("Error! Invalid argument!");
        System.out.println();
    } 
    printstars(no_stars);
}
public static void printstars(int n)
{System.out.println(n);
int i;
for(i=0;i<=n;i++)
{    
    System.out.println('*');
}
}
于 2013-06-13T18:06:40.237 に答える