2013-02-27 19 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); 
    }