2017-02-09 125 views
4

创建一个名为IGPAY的GUI应用程序,让用户输入一个单词。然后,当用户点击一个按钮时,你的程序将生成并显示该单词的Pig Latin等值。 (要做到这一点,你删除该单词的第一个字母,然后将该字母加到单词的后面加上字母“ay”。例如,鱼会变成ishfay,球会变成allbay。)确保GUI很吸引人在外观上,所有标签,文本框,按钮和类似标签都有清晰的标签。提示:将单词存储在字符串中,并考虑使用Substring方法。还要记住一个字符串的Length属性会告诉你它的长度。有关示例,请参阅本文的第79-80页。猪拉丁语翻译器。 C#作业

这是我想出的代码。我对这种语言很陌生,对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; 
} 
+2

为什么标记C++? –

回答

1
first = word.Substring(0, 1); 
rest = word.Substring(1, word.Length - 1); 

由于Substring()方法从零开始,word.Length是字符串的外部。将第二个参数更改为word.Length - 1应该可以避免该错误。

而且,因为你只需要第一个字符,以Substring()第一个电话应该为1

好你叫这个了功课,并给予你试图代码的第二个参数。

(编辑纳入罗布的非常正确评价关于.Substring(1)

+1

这里的实际问题是我们跳过一个字符,然后取长度字符。无论它是否使用基于零的索引(尽管对于1索引,Substring(1)没有太大意义),会发生这种情况。 – Rob

3

不知道为什么你有一个downvote,抓好声明这是家庭作业,提供至少你已经做了一些工作。除此之外,这里的每个人都应该感激你想要学习。

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

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

  1. 检查输入的字符串以确保它至少有两个字符,如果不是,提示用户。

  2. 通过使用一个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); 
    } 
    

编辑 - 我已经编辑上面你真正想拥有,而这正1第一个字符串,并且会给你的第一个字母后的字符串中一切什么答案。基本上,你说的是给我从第一个位置开始的字符串,或者第二个字母。然后,第二个变量说给我的字符串从0开始,只有1字符的长度。这基本上只会给你第一个字母。所以,这会给你你想要的。加上检查以确保至少输入了两个字符,并且不应该有任何例外。

希望这会有所帮助!

+0

Rob在下面说得很好,我的答案仍然有效,但您需要确保您在所需位置开始子串以获得所需结果并相应地检查或减去长度。我没有考虑到我的答案。 –