尝试用c#打印模式,但习惯使用java语法,有什么提示吗?

qfe3c7zg  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(290)

下面的代码是模式“a”,感觉一旦我得到“a”,我就可以得到其他的。
我喜欢java中的array[int].length语法,它有助于获得要打印的模式,如图所示。但我不认为这样的事情存在于c#。

class Main 
{
    public static void main(String[] args)
    {
        char[][] arr = new char[10][10];
        int starCount = 10;
        for(int i = 0; i < arr.length; i++)
        {
            for(int j = 0; j < starCount; j++)
            {
                arr[i][j] = '*';
            }
            for(int k = starCount; k < arr[i].length; k++)
            {
                arr[i][k] = '-';
            }
            starCount--;
        }
        for(int a = 0; a < arr.length; a++)
        {
            for(int b = 0; b < arr[a].length; b++)
            {
                System.out.print(arr[a][b]);
            }
            System.out.println();

        }
    }
}

这段代码以递减的方式打印'*',但是我正在努力用'-'字符替换数组中的空元素,如图所示。

class MainClass {
  public static void Main (string[] args) 
  {
    char[ , ] arr = new char[10,10];
    int starCount = 10;
    for(int i = 0; i < arr.Length; i++)
    {
      for (int j = 0; j < starCount; j++)
      {
        arr[i , j] = '*';
      }
      for (int k = 0; ) //IDK WHAT TO DO TO ASSIGN ARR[I , K] = '-';
      starCount--;

    }
    for (int i = 0; i < 10; i++) 
    {
     for (int j = 0; j < 10; j++)
     {
       Console.Write(arr[i , j]);
     }
     Console.WriteLine();
    }
  }
}
ujv3wf0j

ujv3wf0j1#

最简单的方法是查看array类的c文档。在这里您会发现array类有一个 GetLength() 方法返回 length java数组的属性返回。
使用该方法可以将代码更改为

class MainClass {
  public static void Main (string[] args) 
  {
    char[ , ] arr = new char[10,10];
    int starCount = 10;
    for(int i = 0; i < arr.GetLength(0); i++)
    {
      for (int j = 0; j < starCount; j++)
      {
        arr[i , j] = '*';
      }
      for (int k = starCount; k < arr.GetLength(1); k++)
      {
        arr[i , k] = '*';
      }
      starCount--;

    }
    for (int i = 0; i < arr.GetLength(0); i++) 
    {
     for (int j = 0; j < arr.GetLength(1); j++)
     {
       Console.Write(arr[i , j]);
     }
     Console.WriteLine();
    }
  }
}
bfhwhh0e

bfhwhh0e2#

这里有一个不同的方法来解决原始问题,它可能更容易转换。
构建一个由10颗星和9个破折号组成的字符串,例如,硬编码为:

String line = "**********---------";

现在打印包含该字符串子字符串的10行:

for (int i = 0; i < 10; i++)
    System.out.println(line.substring(i, i + 10));

输出


**********
*********-
********--
*******---
******----
*****-----
****------
***-------
**--------
* ---------

如果大小是动态的,则基于 int 变量中的值 starCount ,则在Java11+中可以使用 repeat() 方法:

String line = "*".repeat(starCount) + "-".repeat(starCount - 1);
for (int i = 0; i < starCount; i++)
    System.out.println(line.substring(i, i + starCount));

在c#中应该很容易做到这一点。请参阅:在c#中重复字符的最佳方法。
在低于11的java版本中,您可以构建 char[] :

char[] line = new char[2 * starCount - 1];
Arrays.fill(line, 0, starCount, '*');
Arrays.fill(line, starCount, line.length, '-');
for (int i = 0; i < starCount; i++)
    System.out.println(new String(line, i, starCount));

相关问题