0

かなり新しい C# 開発者です。私はマッドライブラリジェネレーターを開発しようとしています。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)];
}
4

5 に答える 5

2

Your verb-adding procedure is the problem.

You have set up a loop that iterates across all entries in your verb array, and replaces each one with the current value of your verb textbox. So, when you click the button to select a new verb, you're randomly selecting a verb from a list of entries that's always going to be identical once you've started adding verbs - and the verb chosen will always be the last one you added.

I'd suggest you take a look at a List, which can grow more readily and simplifies your Add problem. Might help!

// 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)];
 }
}
于 2013-02-27T16:57:20.923 に答える
1

C# では配列は固定長であるため、アプリケーションが動詞の共通プールに動詞を動的に追加できることに基づいている場合は、変更を検討する必要があります。

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

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

List はサイズが大きくなる可能性があるため、既に 10 個の動詞があり、別の動詞を追加したい場合でも問題ありません。で必要なコードは次のようにbutton5_Clickなります。

verbList.Add(txtaddverb.Text);
于 2013-02-27T17:00:19.187 に答える
0

すべてのバグの問題を解決した後、最終的に使用したコードは次のとおりです。

名前空間 WindowsFormsApplication1

{

public class Lists

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

    public static Random randomverb = new Random();
}

}

公開文字列 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();
    }

public void button5_Click(オブジェクト送信者, EventArgs e)

    {
        Lists.verbList.Add(txtaddverb.Text);
    }
于 2013-02-27T17:53:44.897 に答える
0

動く:

Random randomverb = new Random(); 

クラスレベルまで。

于 2013-02-27T16:52:20.600 に答える
-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);

        }
于 2013-02-27T16:56:38.343 に答える