我得到了这个Exception
,我真的不明白为什么。
我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SomeColors
{
class Program
{
public static int currentCursorX = Console.CursorLeft;
public static int currentCursorY = Console.CursorTop;
public static Color color = new Color();
public static void SetCursorXPosition(int xPosition)
{
currentCursorX = xPosition;
Console.CursorLeft = currentCursorX; // System.ArgumentOutOfRangeException
}
public static void DrawRightHalfCircle(int height,int width,char printedCharacter)
{
for (int i = 0;i < height / 2;i++)
{
Console.WriteLine(printedCharacter);
SetCursorXPosition(currentCursorX + 1);
}
SetCursorXPosition(currentCursorX - 1);
for (int i = 0;i < height / 2;i++)
{
Console.WriteLine(printedCharacter);
SetCursorXPosition(currentCursorX - 1);
}
}
static void Main(string[] args)
{
const char PRINTED_CHARACTER = '*';
const ConsoleColor WHITE = ConsoleColor.White;
color.SetColor(WHITE);
DrawRightHalfCircle(4, 4, PRINTED_CHARACTER);
Console.ReadLine();
}
我在Exception
行的循环的最后一次迭代中得到Console.CursorLeft = currentCursorX;
。
有什么建议吗?
答案 0 :(得分:1)
在第二个循环的最后一次迭代中有一个额外的SetCursorXPosition(currentCursorX - 1)
使currentCursorX
为负。删除它减去一个循环周期:
for (int i = 0;i < height / 2;i++)
{
Console.WriteLine(printedCharacter);
SetCursorXPosition(currentCursorX + 1);
}
// SetCursorXPosition(currentCursorX - 1); // <-- Remove this
for (int i = 0;i < height / 2;i++)
{
Console.WriteLine(printedCharacter);
SetCursorXPosition(currentCursorX - 1);
}
或最终:
for (int i = 0;i < height / 2;i++)
{
Console.WriteLine(printedCharacter);
SetCursorXPosition(currentCursorX + 1);
}
SetCursorXPosition(currentCursorX - 1);
for (int i = 0;i < (height / 2) - 1;i++)
{
Console.WriteLine(printedCharacter);
SetCursorXPosition(currentCursorX - 1);
}
答案 1 :(得分:0)
您收到错误是因为在循环的最后一次迭代中,变量currentCursorX
设置为0
。
当最后一次迭代运行时,它会调用以下代码:
SetCursorXPosition(currentCursorX - 1);
我们现在学到的内容与:
相同SetCursorXPosition(0 - 1);
所以当我们到达这里时:
Console.CursorLeft = currentCursorX;
我们正在尝试将值设置为-1
,这超出了允许值的范围。
尝试将行更改为:
Console.CursorLeft = currentCursorX >= 0 ? currentCursorX : 0;
基本上说:
if (currentCursorX >= 0)
{
Console.CursorLeft = currentCursorX;
}
else
{
Console.CursorLeft = 0;
}