等腰三角形 c#

时间:2021-01-18 22:27:01

标签: c#

我有一个实验室,用户应该能够在其中输入一个高度和他们想要的等腰三角形的符号,我们应该能够改变的两件事是如果他们想要一个大于 10 的三角形,它会变成一个三角形高度为 3,如果输入无效字符,如空格,则三角形中使用的字符应为星号。如何确定何时将字符切换为 *?这是我目前所拥有的:

//allow user input to print isosceles triangle
using System;
class MainClass {
  public static void Main (string[] args) {
    char character;//entry
    int height;

    Console.Write("enter character for triangle: ");
    character = Convert.ToChar(Console.ReadLine());

    Console.Write("enter height for triangle: ");
    height = Convert.ToInt32(Console.ReadLine());
      if (height>10){
        height = 3;
      }//end if
      for(int row = 0; row<=height-1;row++){
        Console.WriteLine(new string (character, row+1));
      }//end for
      for(int row = height-1; row>=1;row--){
        Console.WriteLine(new string (character, row));
      }//end for
    Console.WriteLine("done");
  }//end main
}//end class

3 个答案:

答案 0 :(得分:1)

列出允许的字符。如果用户输入的字符不包含在此列表中,则它是无效的。您可以将字符串视为字符列表,因此您不必用单引号将每个单独的字符括起来。

var allowedCharacters = "abcdefgABCDEFG!@#$";
if (!allowedCharacters.Contains(character))
    character = '*';

或者,您可以使用正则表达式,这样您就不必键入从 a 到 z 的每个字母:

var allowedCharacters = "[a-zA-Z0-9!@#$]";
if (!Regex.IsMatch(character.ToString(), allowedCharacters))
    character = '*';

答案 1 :(得分:1)

<块引用>

“如何确定何时将字符切换为 *

在您从用户那里获得角色后,是查看它是否有效的好时机。

其他一些注意事项/想法:

  1. 最好使用 int.TryParse 来尝试将字符串解析为整数而不是 Convert.ToInt32,因为如果输入不是整数,Convert 会抛出异常,而 {{如果解析成功,1}} 将返回 TryParse,并将 bool 参数设置为解析值
  2. out 相同。如果您只想从用户那里获取一个字符,那么您可以使用 Convert.ToChar 读取用户输入的第一个字符。
  3. 如果Console.ReadKey().KeyChar怎么办?如果他们输入 height < 1 或负数,我们不应该也使用 3 吗?
  4. 如果你想看到最后的输出,你应该添加一个 0 作为最后一行,这样程序在退出之前会等待用户输入。
  5. 如果可能,通常认为在声明变量时对其进行初始化是更好的做法(例如 Console.ReadKey()character)。
  6. 我们可以通过强制 height 在我们期望的范围内来稍微简化 for 逻辑,这样我们就不必在每次迭代时进行额外的数学运算。

例如:

row

注意,如果有多个无效字符,可以将它们放在一个列表中,并检查输入是否与列表中的任何项目匹配:

Console.Write("Enter the character to use when drawing the triangle: ");
char character = Console.ReadKey().KeyChar;

// Check if our character is valid, and if it's not, set it to the default value
if (character == ' ')
{
    character = '*';
}

int height;
Console.Write("Enter the triangle's height: ");

if (!int.TryParse(Console.ReadLine(), out height) ||
    height > 10 || height < 1)
{
    height = 3;
}

for(int row = 1; row <= height; row++)
{
    Console.WriteLine(new string (character, row));
}

for(int row = height; row > 0; row--)
{
    Console.WriteLine(new string (character, row));
}

Console.Write("Done! Press any key to exit...");
Console.ReadKey();

答案 2 :(得分:1)

最好使用 int.TryParse 来尝试将字符串解析为整数而不是 Convert.ToInt32,因为如果输入不是整数,Convert 会抛出异常,而如果解析成功,TryParse 将返回一个 bool并将为解析的值设置一个输出参数。尝试添加允许的字符列表,如果不是,请使用 *

相关问题