Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用星号制作ASCII沙漏_Java_Loops_Nested Loops_Ascii Art_Nested For Loop - Fatal编程技术网

Java 使用星号制作ASCII沙漏

Java 使用星号制作ASCII沙漏,java,loops,nested-loops,ascii-art,nested-for-loop,Java,Loops,Nested Loops,Ascii Art,Nested For Loop,我知道有人问过,但我很难理解其他程序和嵌套循环,如果有人有一个技巧来跟随嵌套循环并用星号制作形状,我想知道,因为这真的让我困惑 以下是我在多次尝试和实验后编写的代码: 扫描仪输入=新扫描仪(System.in); System.out.print(“输入一个数字:”); int userentry=input.nextInt(); 对于(int i=0;i

我知道有人问过,但我很难理解其他程序和嵌套循环,如果有人有一个技巧来跟随嵌套循环并用星号制作形状,我想知道,因为这真的让我困惑

以下是我在多次尝试和实验后编写的代码:

扫描仪输入=新扫描仪(System.in);
System.out.print(“输入一个数字:”);
int userentry=input.nextInt();
对于(int i=0;i=i;j--){
系统输出打印(“*”);
}
System.out.println();
}
for(int i=0;i对于(int j=0;j由于用于输入/输出/代码的字体中的每个字符都具有相同的宽度,因此必须将每次迭代减少2,如:

****
 **
 **
****

而不是一个。 对于间距,请使用以下命令:

for (int i = userentry; i > 0; i -= 2) {
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  for (int j = 0; j < i; j++) System.out.print("*");
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  System.out.println();
}
for (int i = (userentry % 2 == 0 ? 2 : 3); i <= userentry; i += 2) {
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  for (int j = 0; j < i; j++) System.out.print("*");
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  System.out.println();
}
for(int i=userentry;i>0;i-=2){
对于(intj=0;j<(userentry-i)/2;j++)系统输出打印(“”);
用于(int j=0;j对于(int i=(userentry%2==0?2:3);i由于用于输入/输出/代码的字体中的每个字符都具有相同的宽度,因此必须将每次迭代减少2,如:

****
 **
 **
****

而不是一个。 对于间距,请使用以下命令:

for (int i = userentry; i > 0; i -= 2) {
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  for (int j = 0; j < i; j++) System.out.print("*");
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  System.out.println();
}
for (int i = (userentry % 2 == 0 ? 2 : 3); i <= userentry; i += 2) {
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  for (int j = 0; j < i; j++) System.out.print("*");
  for (int j = 0; j < (userentry - i) / 2; j++) System.out.print(" ");
  System.out.println();
}
for(int i=userentry;i>0;i-=2){
对于(intj=0;j<(userentry-i)/2;j++)系统输出打印(“”);
用于(int j=0;j[-n,n]
内的数字矩阵,其中每个点为:

m[i][j] = Math.abs(i) - Math.abs(j);
如果
n=3
,则该矩阵如下所示:

  0  1  2  3  2  1  0
 -1  0  1  2  1  0 -1
 -2 -1  0  1  0 -1 -2
 -3 -2 -1  0 -1 -2 -3
 -2 -1  0  1  0 -1 -2
 -1  0  1  2  1  0 -1
  0  1  2  3  2  1  0

int n=3;
IntStream.rangeClosed(-n,n)
.map(数学::abs)
.peek(i->IntStream.rangeClosed(-n,n)
.map(数学::abs)
.mapToObj(j->iSystem.out.println());
输出:

* * * * * * * 
  * * * * *   
    * * *     
      *       
    * * *     
  * * * * *   
* * * * * * * 

另请参见:

您可以将沙漏可视化为范围
[-n,n]
内的数字矩阵,其中每个点为:

m[i][j] = Math.abs(i) - Math.abs(j);
如果
n=3
,则该矩阵如下所示:

  0  1  2  3  2  1  0
 -1  0  1  2  1  0 -1
 -2 -1  0  1  0 -1 -2
 -3 -2 -1  0 -1 -2 -3
 -2 -1  0  1  0 -1 -2
 -1  0  1  2  1  0 -1
  0  1  2  3  2  1  0

int n=3;
IntStream.rangeClosed(-n,n)
.map(数学::abs)
.peek(i->IntStream.rangeClosed(-n,n)
.map(数学::abs)
.mapToObj(j->iSystem.out.println());
输出:

* * * * * * * 
  * * * * *   
    * * *     
      *       
    * * *     
  * * * * *   
* * * * * * * 

另请参见:

想象一个坐标平面在垂直和水平范围内。您可以使用两个嵌套for循环和一个if-else语句将其打印出来:

int n=3;
对于(int i=-n;i想象一个垂直和水平范围内的坐标平面
[-n,n]
。您可以使用两个嵌套for循环和一个if-else语句将其打印出来:

int n=3;
对于(int i=-n;i)