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 替换 '*',我可以看到它循环到 50/52/54,即使我运行循环 no_stars 次。

这里似乎有什么问题?

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
no_stars = (int)System.in.read();

这是使用用户输入的任何字符的 ASCII 值。试试这个:

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

或者,一起删除no_stars变量,

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

此外,在您的for-loop 中,条件应该是i < n,以便执行正确的迭代次数。并且无需i在循环之外声明,您只需执行for (int i = 0; i < n; i++).

于 2013-06-13T18:00:15.453 回答
1

您的代码中有两个错误。


第一的

System.in.read()

正在读取一个字节,而不是整数,因此,它正在解析整数并获取它的第一个字节。


第二

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

将始终打印比请求多一星。所以,应该改成

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

建议:您可以使用 Scanner 来读取您的整数,例如

Scanner scanner = new Scanner(System.in);
no_stars = scanner.nextInt();
于 2013-06-13T18:02:13.733 回答
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 回答