C# 猪拉丁翻译。作业

C# 猪拉丁翻译。作业,c#,visual-studio,C#,Visual Studio,创建一个名为IGPAY的GUI应用程序,允许用户输入单词。然后,当用户单击一个按钮时,您的程序将生成并显示该单词的对应拉丁语。(要做到这一点,请删除单词的第一个字母,然后将该字母加上字母“ay”。例如,fish将变成ishfay,ball将变成allbay。)确保GUI在外观上具有吸引力,并且所有标签、文本框、按钮和类似项都有清晰的标签。提示:将单词存储在字符串中,并考虑使用子字符串方法。还要记住,字符串的Length属性将告诉您它的长度。示例见正文第79-80页 这是我想出的代码。我不熟悉这种

创建一个名为IGPAY的GUI应用程序,允许用户输入单词。然后,当用户单击一个按钮时,您的程序将生成并显示该单词的对应拉丁语。(要做到这一点,请删除单词的第一个字母,然后将该字母加上字母“ay”。例如,fish将变成ishfay,ball将变成allbay。)确保GUI在外观上具有吸引力,并且所有标签、文本框、按钮和类似项都有清晰的标签。提示:将单词存储在字符串中,并考虑使用子字符串方法。还要记住,字符串的Length属性将告诉您它的长度。示例见正文第79-80页

这是我想出的代码。我不熟悉这种语言,对Python也有一点了解,但我不明白为什么它会抛出一个“超出范围异常”错误。我试图使它,使代码接受任何单词,并显示在拉丁猪

private void button1_Click(object sender, EventArgs e)
{
       string word; 
       string first;
       string rest;
       string full;
       word = textBox1.Text;
       first = word.Substring(0);
       rest = word.Substring(1, word.Length);
       full =  rest + first + "ay";
       label2.Text = full;
}
由于
Substring()
方法是基于零的,
word.Length
在字符串之外。将第二个参数更改为
word.Length-1
可以避免错误

此外,由于只需要第一个字符,因此对
Substring()
的第一次调用的第二个参数应为1

很好,你已经把它作为家庭作业,并给出了你的代码


(编辑以合并Rob关于
.Substring(1)
)的非常正确的评论)

不知道为什么你会被否决,很好地宣布这是家庭作业,至少提供了一些你已经完成的工作。除此之外,这里的每个人都应该感激你想要学习

如果我是你,我会考虑一些事情。除了Phylyp的答案应该修复您的异常之外,您还应该处理用户输入少于两个字符的情况,这也可能导致异常

下面我举了一个你可以做的三件事的例子。不是说这是最好的方式,而是一种选择

  • 检查输入的字符串,确保至少有两个字符,如果没有,则提示用户

  • 通过使用一个string.Format调用减少字符串变量和声明行的数量

    private void Button1_Click(object sender, EventArgs e)
    {
        const string suffix = "ay";
        string enteredString = textBox1.Text;
    
        //Check the length to make sure it is at least 2
        if(enteredString.Length < 2)
        {
            MessageBox.Show("Please enter at least 2 or more characters");
            return;
        }
    
        //We get here if 2 or more characters were entered.
        //Lets go ahead an process our string
        label2.Text = string.Format("{0}{1}{2}",
            enteredString.Substring(1),
            enteredString.Substring(0,1),
            suffix);
    }
    
    private void按钮1\u单击(对象发送者,事件参数e)
    {
    常量字符串后缀=“ay”;
    字符串enteredString=textBox1.Text;
    //检查长度,确保长度至少为2
    如果(输入的字符串长度<2)
    {
    MessageBox.Show(“请输入至少2个或更多字符”);
    返回;
    }
    //如果输入了2个或更多字符,我们将到达这里。
    //让我们继续处理我们的字符串
    label2.Text=string.Format(“{0}{1}{2}”,
    输入字符串。子字符串(1),
    输入字符串。子字符串(0,1),
    后缀);
    }
    
  • 编辑-我已将上面的答案编辑为您实际想要的答案,这是第一个子字符串,仅为1,这将为您提供字符串中第一个字母后的所有内容。基本上,你是说给我从位置1开始的字符串,或者第二个字母。然后,第二个变量说,给我从位置0开始的字符串,长度仅为1个字符。这基本上只会给你第一个字母。所以,这会给你你想要的。将其与检查结合起来,确保至少输入了两个字符,并且您不应该有任何异常


    希望这有帮助长度>代码>字符。无论是否使用基于零的索引,都会发生这种情况(尽管对于1-索引,子字符串(1)没有多大意义)。Rob在下面给出了一个很好的观点,我的答案仍然有效,但您确实需要确保在所需的位置开始子字符串,以获得所需的结果,并相应地检查或减去长度。我在回答中没有考虑到这一点。
    private void Button1_Click(object sender, EventArgs e)
    {
        const string suffix = "ay";
        string enteredString = textBox1.Text;
    
        //Check the length to make sure it is at least 2
        if(enteredString.Length < 2)
        {
            MessageBox.Show("Please enter at least 2 or more characters");
            return;
        }
    
        //We get here if 2 or more characters were entered.
        //Lets go ahead an process our string
        label2.Text = string.Format("{0}{1}{2}",
            enteredString.Substring(1),
            enteredString.Substring(0,1),
            suffix);
    }