import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int record = sc.nextInt(); String c = sc.next(); int newRecord = (record - 1)/2; int n = 0; int x,v,b; for(int z = 0;z < 100;z++) { if (newRecord>(2*n+1)) { n++; newRecord = newRecord - 2*n - 1; }else break; } for(x = n;x >= 0;x--){ for( v = x;v<n;v++){ System.out.print(" "); } for(b = 0;b < 2*x+1;b++){ System.out.print(c); record--; } System.out.println(); } //System.out.println(c); for(x = 1;x <= n;x++){ for( v = x;v<n;v++){ System.out.print(" "); } for(b = 0;b < 2*x+1;b++){ System.out.print(c); record--; } System.out.println(); } System.out.println(record); } }
时间: 2024-02-14 18:21:02 浏览: 68
Einleser:java.util.Scanner 的示例
你的代码中有一些小问题,我来帮你指出并给出修改意见:
1.在输入语句中,应该使用 sc.nextLine() 而不是 sc.next(),这样可以读取整个输入行,否则当输入字符串中有空格时会出错。
2.在你的第一个 for 循环中,循环次数设置为100是没有必要的,应该根据计算得出的沙漏层数来进行循环,即循环次数为 n。
3.在第二个 for 循环中,对于每一行应该先输出空格,再输出星号,而你的代码中是先输出星号再输出空格,这是不正确的。修改方法是把循环顺序反过来,先输出空格再输出星号。
4.在最后输出剩余星号的个数时,应该直接输出变量 newRecord 的值,而你的代码中输出的是 record 的值,这是不正确的。另外,这一行输出语句应该移动到第一个 for 循环的外面,否则会重复输出。
下面是修改后的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int record = sc.nextInt();
sc.nextLine();
String c = sc.nextLine();
int newRecord = (record - 1)/2;
int n = 0;
int x,v,b;
while (newRecord>(2*n+1)) {
n++;
newRecord = newRecord - 2*n - 1;
}
for(x = n;x >= 0;x--){
for( v = x;v<n;v++){
System.out.print(" ");
}
for(b = 0;b < 2*x+1;b++){
System.out.print(c);
}
System.out.println();
}
for(x = 1;x <= n;x++){
for( v = x;v<n;v++){
System.out.print(" ");
}
for(b = 0;b < 2*x+1;b++){
System.out.print(c);
}
System.out.println();
}
System.out.println(newRecord);
}
}
阅读全文