2017-02-09 129 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在下面說得很好,我的答案仍然有效,但您需要確保您在所需位置開始子串以獲得所需結果並相應地檢查或減去長度。我沒有考慮到我的答案。 –