2013-02-27 38 views
0

相當新的C#開發人員在這裏。我試圖開發一個瘋狂的lib生成器。我有一個按鈕button_1標記爲「動詞」,應該產生一個隨機動詞。動詞來自一個字符串數組,它是一個動詞列表。我有另一個按鈕button_5標記爲「添加新動詞」,應該將相應文本框中的動詞添加到動詞數組中。我遇到的問題是,當我單擊標有「動詞」的button_1時,它僅生成最後一個動詞。將文本框輸入轉換爲數組

下面是代碼的樣子:

namespace WindowsFormsApplication1 
{ 
    public class Arrays 
    { 
     public static string[] verbarray = new string[10]; 
    } 
} 

public void button5_Click(object sender, EventArgs e) 
{ 
    for (int iverb = 0; iverb < Arrays.verbarray.Length; iverb++) 
    { 
     Arrays.verbarray[iverb] = Convert.ToString(this.txtaddverb.Text); 
    } 
} 

public void button1_Click(object sender, EventArgs e) 
{ 
    Random randomverb = new Random(); 
    verb.Text = Arrays.verbarray[randomverb.Next(0, Arrays.verbarray.Length)]; 
} 
+0

你button5_Click()過程被重新建羣* *每您的元件陣列txtAddVerb.Text的*電流*值在.. .so,當你點擊button1時,你會從相同的數組條目列表中隨機選擇。我會將其移至答案並添加更多詳細信息。 – 2013-02-27 16:50:59

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-02-27 18:00:02

回答

0

移動:

Random randomverb = new Random(); 

的一流水平。

-2

你應該在這裏糾正你的邏輯:

public void button5_Click(object sender7, EventArgs e) 
    { 
     for (int iverb = 0; iverb < Arrays.verbarray.Length; iverb++) 
     { 
      Arrays.verbarray[iverb] = Convert.ToString(this.txtaddverb.Text); 
     } 
    } 

你想要什麼

public void button5_Click(object sender7, EventArgs e) 
     { 
      // suppose index 6 
       Arrays.verbarray[6] = Convert.ToString(this.txtaddverb.Text); 

     } 
+0

爲什麼你會建議他* hardcode *這樣的數組元素值? – 2013-02-27 16:58:44

+0

我只是讓他知道他錯在哪裏,他可以採取一個整數的形式,並可以做他想要的東西6 – vikas 2013-02-27 17:00:36

+0

爲了讓你的答案更可行,你應該顯示你在錯誤的地方做了什麼,然後解釋爲什麼它是錯的。然後提供有效的解決方案。它會讓你的答案更有益。不過謝謝你的貢獻。 – Greg 2013-02-27 17:38:09

2

您動詞添加程序的問題。

您已經設置了一個循環迭代跨越所有條目在動詞陣列,並取代每一個與你的動詞文本框的當前值。所以,當你點擊按鈕選擇一個新的動詞時,你會從一系列條目中隨機選擇一個動詞,這些動詞在你開始添加動詞時總是相同的 - 而選擇的動詞將永遠是最後一個動詞添加。

我建議你看看列表,它可以更容易地增長,並簡化你的添加問題。可能有幫助!

// a little pseudocode to help with the notion..wire in your 
// event handlers accordingly 
class VerbManager 
{ 

List<String> verbs= new List<String>(); 
Random picker = new Random(); 

public void addVerb(String newVerb) 
{ 
    verbs.Add(newVerb); 
} 

public string pickRandomVerb() 
{ 
    return verbs[picker.Next(0,verbs.Count)]; 
} 
} 
+1

+1你打我推薦列表 – 2013-02-27 17:02:59

+0

太棒了。這非常有幫助。我現在開始工作了。謝謝! – 2013-02-27 17:35:08

+0

太棒了!很高興它有幫助。如果你這麼傾向,可以考慮選擇它作爲答案。祝你有愉快的一天! – 2013-02-27 18:22:23

1

在C#中的數組的長度是固定的,因此,如果您的應用程序是根據各地能夠動詞加動詞的公共池動態,你應該考慮改變

public static string[] verbarray = new string[10]; 

public static List<string> verbList = new List<string>(); 

一個列表可以增加大小,所以如果你已經有10個動詞並想添加另一個,那麼這將是沒有問題的。然後在button5_Click所需的代碼將僅僅是閱讀:

verbList.Add(txtaddverb.Text); 
+0

這很有幫助。謝謝! – 2013-02-27 17:35:28

0

這是我最後使用的代碼解決所有的bug問題後:

命名空間WindowsFormsApplication1

{

public class Lists 

{ 
    public static List<string> verbList = new List<string>(); 

    public static Random randomverb = new Random(); 
} 

}

public string pickRandomVerb( )

{ 
     return Lists.verbList[Lists.randomverb.Next(0, Lists.verbList.Count)]; 
    } 
    public void button1_Click(object sender, EventArgs e) 
    { 
     if (Lists.verbList.Count > 0) verb.Text = pickRandomVerb(); 
    } 

公共無效button5_Click(對象發件人,EventArgs的)

{ 
     Lists.verbList.Add(txtaddverb.Text); 
    }