2

//问题本身(之后我的代码)

变量 n 是随机生成的整数。输出字符“*”和“#”,以便第一行仅包含星号,最后一行仅包含数字符号。连续每行的星数减少。一行中的字符总数为 n 并且有 n + 1 行。

例如,如果 n 的值为 5,程序将输出:

 *****  
 ****#    
 ***##      
 **###       
 *####      
 #####      

//下面是我的代码!

Random r = new Random();       
int n = r.nextInt(5) + 10;    
System.out.println("n: "+n);

while(n>0){

for(int star = n; star>0; star--){
  System.out.print("*");
}

for(int hash = 0; hash<n; hash++){
  System.out.print("#");

    } 

    System.out.println("");  //new line
n--;


}

//我的代码输出 - 问题:# 需要从 0 开始增大,而不是像 * 那样减小

**********##########
*********#########
********########
*******#######
******######
*****#####
****####
***###
**##
*#
4

5 回答 5

1

只要记住你所在的线路。无需算法讨论。

final int n = 4; 

int lineNr = 0;

while (n >= lineNr)
{
    for (int i = 1; i <= n - lineNr; i++)
        System.out.print("*");

    for (int j = 1; j <= lineNr; j++)
        System.out.print("#");

    System.out.println();
    lineNr++;
}
于 2013-08-26T13:18:17.983 回答
0

我的代码:

Random r = new Random();       
int lines = r.nextInt(5) + 10;
System.out.println("n: "+lines);

for (int n=lines; n>=0; n--) {
  String toPrint = "*";
  for(int i=0; i<lines; i++){
    if (i==n) {
      toPrint = "#";
    }
    System.out.print(toPrint);
  }
  System.out.println();
}

我不喜欢你的命名约定。单字母字符最好单独用于循环。主循环(在您的情况下while)看起来像一个简单的for.

每次都会进行检查,这可能比这里人们似乎使用的两个循环效率低(就像你所做的那样)。但是 IMO 的代码使用起来更加清晰。请注意,每行仅进行一次字符串切换。

于 2013-08-26T13:30:21.787 回答
0

您当前正在*每次迭代中打印正确数量的 s。您应该打印的 s 数量#始终等于您正在进行的迭代(从 0 开始)。因此,您可以保留一个计数器(例如i),该计数器将被初始化为 0 并在每次 -loop 迭代结束时递增一次while,然后您可以#通过循环打印 s 到i

for (int hash = 0; hash < i; hash++) {
    System.out.print("#");
}

然而,更好的方法是只使用for-loop 代替while-loop 并避免更改n,请记住,在迭代中您应该打印s 和s:ithn - i *i #

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

    for (int star = 0; star < n - i; star++) {  // n-i stars
        System.out.print("*");
    }

    for (int hash = 0; hash < i; hash++) {  // i hashes
        System.out.print("#");
    }

    System.out.println();  // don't need an empty string here
}
于 2013-08-26T13:11:46.247 回答
0

你的循环开始没star问题,但在你的hash循环中,你告诉你的程序只是倒数n并打印那么多的哈希标记。

相反,您需要另一个数字来表示星数或散列数;减去从n得到另一个数字。使用嵌套for循环;外部的计数n打印每一行,内部的计数从 0 到lineNumber打印星,然后直到n打印散列。

于 2013-08-26T13:13:43.183 回答
0

不要在循环中修改 n,因为 n 会为您提供每行的符号总数。在这里,我保留了您的程序,并介绍了要在 while 循环中使用的变量 i。

Random r = new Random();       
int n = r.nextInt(5) + 10;    
System.out.println("n: "+n);
int i=n;

while(i>=0){

  for(int star = i; star>0; star--){
    System.out.print("*");
  }

  for(int hash = i; hash<n; hash++){
    System.out.print("#");
  } 

  System.out.println("");  //new line
  i--;
}
于 2013-08-26T13:22:24.233 回答