C# C“数组”;圈;

C# C“数组”;圈;,c#,arrays,counter,C#,Arrays,Counter,我有一个数组: class Words { public static string[] wordsArray = { "one", "two", "three", "four" }; } 显示值数组的TextBlock和显示数组下一个值的按钮: private int counter = 0; private void goButton_Click(object sender, RoutedEventArgs e) { if (counter <

我有一个数组:

class Words
{
   public static string[] wordsArray = { "one", "two", "three", "four" };
}
显示值数组的TextBlock和显示数组下一个值的按钮:

private int counter = 0;

    private void goButton_Click(object sender, RoutedEventArgs e)
    {

        if (counter < Words.wordsArray.Length)
        {
            enWordTextBlock.Text = Words.wordsArray[counter++];
        }
    }
private int counter=0;
私有无效按钮单击(对象发送器,路由目标)
{
if(计数器
当该框出现在数组的最后一个值上时,程序将继续不工作,如何使其在一个“圆圈”中工作

谢谢大家

这应该有效:


私有无效按钮单击(对象发送器,路由目标)
{
计数器+++;//增加计数器
int i=计数器%Words.wordsArray.Length;//模运算
enWordTextBlock.Text=Words.wordsArray[i];//设置文本
}



[编辑]
好的,这是一个与user1397396注释相关的编辑。我不确定我是否理解正确,但你可能对负值模数有问题。例如:

int counter = 0;
int mod = 4;
counter--; // counter is -1 after this line is executed
int result = counter % mod; // result is -1
result = (counter + mod) % mod; // result is now 3 as desired


下面是我将如何实现这些下一个和上一个按钮

private int counter = 0;

private void NextButton_Click(object sender, RoutedEventArgs e)
{
    enWordTextBlock.Text = Words.wordsArray[counter % Words.wordsArray.Length];
    counter++; // put ++ operator in new line to avoid confusion
}

private void PreviousButton_Click(object sender, RoutedEventArgs e)
{
    int wordCount = Words.wordsArray.Length;
    // add wordCount before applying modulus (%) to avoid negative results
    // -1 % 5 = -1; -2 % 5 = -2; -6 % 5 = -1 etc
    // negative values would cause exception when accessing array
    counter = ((counter - 1) + wordCount) % wordCount; 
    enWordTextBlock.Text = Words.wordsArray[counter];
}
例如,此代码会导致按下Next、Previous、Next键,显示“一”、“四”、“一”。


更好的解决方案是使用如下方法(或内联代码):

private static int GetPositiveIntModulus(int value, int mod)
{
    return ((value % mod) + mod) % mod;
}
对于任何值,它都会给您一个肯定的结果,即使
value<-mod
。所以你可以这样写上面的代码:

private int counter = 0;

private void NextButton_Click(object sender, RoutedEventArgs e)
{
    // uncomment this to ensure valid counter
    // if it is changed somewhere else in the program
    //counter = GetPositiveIntModulus(counter, Words.wordsArray.Length);
    enWordTextBlock.Text = Words.wordsArray[counter];
    counter = GetPositiveIntModulus(counter + 1, Words.wordsArray.Length);
}

private void PreviousButton_Click(object sender, RoutedEventArgs e)
{
    counter = GetPositiveIntModulus(counter - 1, Words.wordsArray.Length);
    enWordTextBlock.Text = Words.wordsArray[counter];
}

只是一个旁注:使用此代码,第一次单击按钮后的文本将为“2”,除非计数器初始化为-1。如果有两个按钮:NextButton和PreviousButton,当您单击NextButton时,您将看到数组中的下一个值;当您单击PreviousButton时-您将看到上一个值,但是如果第一个值显示数组,并且您单击PreviousButton-将是一个错误。如何在显示最后一个值时单击上一个按钮。“圈”正好相反?谢谢
private static int GetPositiveIntModulus(int value, int mod)
{
    return ((value % mod) + mod) % mod;
}
private int counter = 0;

private void NextButton_Click(object sender, RoutedEventArgs e)
{
    // uncomment this to ensure valid counter
    // if it is changed somewhere else in the program
    //counter = GetPositiveIntModulus(counter, Words.wordsArray.Length);
    enWordTextBlock.Text = Words.wordsArray[counter];
    counter = GetPositiveIntModulus(counter + 1, Words.wordsArray.Length);
}

private void PreviousButton_Click(object sender, RoutedEventArgs e)
{
    counter = GetPositiveIntModulus(counter - 1, Words.wordsArray.Length);
    enWordTextBlock.Text = Words.wordsArray[counter];
}