-3

文字列 (stringMess) があり、反応時間 (ボタンをクリックするのに必要な時間) を文字列に保存します。ここで、ラベルの最速時間と最低時間を取得したいので、文字列を並べ替える必要があります。しかし、どうすればそれを行うことができますか? (これまでに行ったことはすべてエラーになりました:()

public partial class Form1 : Form
{
//...
int Zeit = 0;
string Mess;
int Anzahl;
//...

private void btnRot_Click(object sender, EventArgs e)
{
   // a timer starts and when you click on the button,
   // the timer stops and write  the time in the stringMess
    Mess = Mess + Zeit + " , ";
    Anzahl = Anzahl + 1;
   //...
}

コードはすべてではありません...

4

2 に答える 2

2

文字列 (および単一の文字列) を使用することで、問題をより難しくしているだけです。の を使用しListますTimeSpan。このようなもの:

List<TimeSpan> reactionTimes = new List<TimeSpan>;

タイマーを開始すると、次のようなことができます。

startTime = DateTime.Now;

そして停止すると:

reactionTimes.Add(DateTime.Now - startTime);    // Note: subtracting two DateTimes results in a TimeSpan

そして、それらを簡単に並べ替えることができます:

reactionTimes.Sort();

ユーザーに表示する場合にのみ、文字列に変換してください。フォーマット文字列を取るメソッドがあるようTimeSpanに、表示方法 (ミリ秒? 秒? 週? 年?) に応じて、これは非常に簡単です。.ToString見る:

http://msdn.microsoft.com/en-us/library/dd992632.aspx

、 などのプロパティでTotalMillisecondsあり、必要に応じてフォーマットできます。TotalSecondsdouble

おそらく実行することもできます(テストされていないコード):

string myString = string.Join(",",
    reactionTimes.Select(x => x.TotalMilliseconds.ToString()).ToArray());
于 2013-10-29T18:57:58.640 に答える
0

文字列ではなく、intのコレクション(配列、リストなど)が必要なようです。絶対に文字列が必要な場合 (宿題の割り当てですか? 本当に、本当に奇妙な要件ですか?)、文字列を分割する必要があります。

それらの最初のものは次のようになります。

int Zeit = 0;
List<int> Mess = new List<int>();
int Anzahl;

次に、ボタンはこれを行います:

private void btnRot_Click(object sender, EventArgs e)
{
  //your other stuff here
  Mess.Add(Zeit);
  Anzahl++;
}

次に、次のように最大値と最小値を取得します。

var biggestZeit = Mess.Max();
var littlestZeit = Mess.Min();

文字列を使用する必要がある場合でも、次のようにして int の配列 (またはリスト) を取得できます。

var resultList = Mess.Split(',').ToList();
var biggestZeit = resultList.Max(s => int.Parse(s));
var littlestZeit = resultList.Min(s => int.Parse(s));

Matt が指摘しているように、 のコレクションを使用することでさらに単純化できますTimeSpan

于 2013-10-29T18:58:29.553 に答える