我是Java的新手,并且作为一个练习想要一个简单的打印程序需要没有。 ' *'根据用户的字符。但不知何故,此代码的输出始终保持相似:
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('*');
}
}
}
如果我更换&#39; *&#39;与i,我可以看到它循环到50/52/54,即使我运行循环no_stars次。
这里似乎有什么问题?
答案 0 :(得分:12)
您需要解析从System.in.read()
收到的数字,或者将其作为整数读取,目前您只是将其转换为,所以如果输入5,它会传递0x35次(这是字符'5的值) “)
你可以做,例如:
Scanner scan = new Scanner( System.in );
printstars( scan.nextInt() );
答案 1 :(得分:5)
因为您正在从输入处读取字符的ASCII码:
no_stars = (int)System.in.read();
应该是
no_stars = Integer.parseInt(Console.readLine());
答案 2 :(得分: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++)
。
答案 3 :(得分:1)
您的代码中存在两个错误。
<强>第一强>
System.in.read()
读取一个字节,而不是一个整数,因此,它正在解析整数并得到它的第一个字节。
<强>第二强>
for (i = 0; i <= n; i++) {
将始终打印超过要求的一颗星。 所以,它应该改为
for (i = 0; i < n; i++) {
建议:您可以使用扫描仪读取整数,例如
Scanner scanner = new Scanner(System.in);
no_stars = scanner.nextInt();
答案 4 :(得分: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('*');
}
}