使用 Java 中的用户输入和空格对这个金字塔模式进行编码?
Coding this pyramid pattern with user input and spaces in Java?
我对编码完全陌生,我的老师不善于解释事情。我不知道 class 中发生了什么,我真的需要帮助!
我以前做过很多金字塔图案,但这是我想不出来的。
我也知道如何获取用户输入,但我需要帮助来理解为什么这不起作用。他简单的给我们解释了这个问题怎么编码,但是我改了试了多少次都不行。
我必须使用用户输入的行数创建一个金字塔。所以如果用户输入 5,它应该是这样的:
*
**
***
****
*****
所以第一行的空格数是四个,第二行是三个空格,依此类推,直到变成零。
这是代码(给出了完全不准确的输出):
System.out.print("\f");
System.out.println("Enter a valid number between 1 and 20.");
int num = 0;
int counter = 1;
num = keyNum.nextInt();
for (int i = 1; i == num; i++)
{
for (int j = 1; j == (num -= counter); j++)
{
System.out.print(" ");
}
for (int k = 1; k == counter; k++)
{
System.out.print("*");
}
System.out.println("");
counter++;
}
请帮忙!我觉得很愚蠢。
非常接近,主要是 for 循环是错误的。
for(initialization;condition;increment)
for循环只在条件为真时执行。在您的情况下,条件并没有真正意义。尝试改变它。你的柜台和我也是一样的:)
大部分是正确的,但是你从 1 开始循环,但它们实际上应该从 0 开始,并且 for 循环中的条件不应该有 ==
这使得它 运行一次。
for (int i = 0; i < num; i++) {
for (int j = 0; j <= (num - counter); j++) {
System.out.print(" ");
}
for (int k = 0; k < counter; k++) {
System.out.print("*");
}
System.out.println("");
counter++;
}
我怀疑你的老师会接受这个。但它只是一个有趣的班轮
int num = 20;
IntStream.range(0, num).forEach(i -> System.out.println(String.format("%" + num + "s", new String(new char[i+1]).replace("[=10=]", "x"))));
有趣的编码练习。无论如何,正如其他人指出的那样,您几乎是正确的。
解决问题的方法有一百种。
这里只是一个省去了循环的变体...
int lines=5;
for (int i=0; i<lines; i++) {
for (int k=0; k<lines; k++) {
System.out.print( (k < lines - i - 1) ? " " : "*");
}
System.out.println();
}
另一种使用单个(显式)循环的解决方案:
for (int i = 1; i <= num; i++) {
int expectedSpaces = num - i;
String spaces = repeat(" ", expectedSpaces);
String asterisks = repeat("*", i);
System.out.println(spaces + asterisks);
}
}
private static final String repeat(String toBeRepeated, int length) {
return new String(new char[length]).replace("[=10=]", toBeRepeated);
}
如其他地方所述,循环变量如 i
通常从 0 开始,因为此类变量可用作 array/List 索引。但是,在这种情况下,没有相关的数组或列表,因此从 1 开始可以简化逻辑。
我做过类似的东西,这就是我做的,你可以试一试。它接受用户输入并显示空格和“#”...
int size = n;
for (int i = 0; i <= size-1; i++){
for(int j = size -1; j > i; j-){
System.out.print(" ");
}
for(int j = 0; j <= i; j++){
System.out.print("#");
}
System.out.println();
}
输出将是:
#
##
###
####
#####
######
我对编码完全陌生,我的老师不善于解释事情。我不知道 class 中发生了什么,我真的需要帮助! 我以前做过很多金字塔图案,但这是我想不出来的。
我也知道如何获取用户输入,但我需要帮助来理解为什么这不起作用。他简单的给我们解释了这个问题怎么编码,但是我改了试了多少次都不行。
我必须使用用户输入的行数创建一个金字塔。所以如果用户输入 5,它应该是这样的:
*
**
***
****
*****
所以第一行的空格数是四个,第二行是三个空格,依此类推,直到变成零。
这是代码(给出了完全不准确的输出):
System.out.print("\f");
System.out.println("Enter a valid number between 1 and 20.");
int num = 0;
int counter = 1;
num = keyNum.nextInt();
for (int i = 1; i == num; i++)
{
for (int j = 1; j == (num -= counter); j++)
{
System.out.print(" ");
}
for (int k = 1; k == counter; k++)
{
System.out.print("*");
}
System.out.println("");
counter++;
}
请帮忙!我觉得很愚蠢。
非常接近,主要是 for 循环是错误的。
for(initialization;condition;increment)
for循环只在条件为真时执行。在您的情况下,条件并没有真正意义。尝试改变它。你的柜台和我也是一样的:)
大部分是正确的,但是你从 1 开始循环,但它们实际上应该从 0 开始,并且 for 循环中的条件不应该有 ==
这使得它 运行一次。
for (int i = 0; i < num; i++) {
for (int j = 0; j <= (num - counter); j++) {
System.out.print(" ");
}
for (int k = 0; k < counter; k++) {
System.out.print("*");
}
System.out.println("");
counter++;
}
我怀疑你的老师会接受这个。但它只是一个有趣的班轮
int num = 20;
IntStream.range(0, num).forEach(i -> System.out.println(String.format("%" + num + "s", new String(new char[i+1]).replace("[=10=]", "x"))));
有趣的编码练习。无论如何,正如其他人指出的那样,您几乎是正确的。 解决问题的方法有一百种。
这里只是一个省去了循环的变体...
int lines=5;
for (int i=0; i<lines; i++) {
for (int k=0; k<lines; k++) {
System.out.print( (k < lines - i - 1) ? " " : "*");
}
System.out.println();
}
另一种使用单个(显式)循环的解决方案:
for (int i = 1; i <= num; i++) {
int expectedSpaces = num - i;
String spaces = repeat(" ", expectedSpaces);
String asterisks = repeat("*", i);
System.out.println(spaces + asterisks);
}
}
private static final String repeat(String toBeRepeated, int length) {
return new String(new char[length]).replace("[=10=]", toBeRepeated);
}
如其他地方所述,循环变量如 i
通常从 0 开始,因为此类变量可用作 array/List 索引。但是,在这种情况下,没有相关的数组或列表,因此从 1 开始可以简化逻辑。
我做过类似的东西,这就是我做的,你可以试一试。它接受用户输入并显示空格和“#”...
int size = n;
for (int i = 0; i <= size-1; i++){
for(int j = size -1; j > i; j-){
System.out.print(" ");
}
for(int j = 0; j <= i; j++){
System.out.print("#");
}
System.out.println();
}
输出将是:
#
##
###
####
#####
######