저는 프로그램에 필요한 시간 클래스를 작성했습니다. 나는 TimeSpan Class와 함께 할 수 있다는 것을 알고 있지만 나 자신을 쓰고 싶지만 이해하지 못한 실수가있다. 우선 클래스 :C# - 시간 클래스가 작동하지 않습니다.
public class Time
{
public int Minutes { get; set; }
public int Seconds { get; set; }
public int MilliSeconds { get; set; }
public Time(int minutes, int seconds, int milliSeconds)
{
Minutes = minutes;
Seconds = seconds;
MilliSeconds = milliSeconds;
}
public Time(string time)
{
if (time.Equals("DNF"))
{
Minutes = -1;
Seconds = -1;
MilliSeconds = -1;
}
else
{
Minutes = Convert.ToInt32(time.Split(':')[0]);
Seconds = Convert.ToInt32(time.Split(':')[1].Split(',')[0]);
MilliSeconds = Convert.ToInt32(time.Split(':')[1].Split(',')[1]);
}
}
public Time(long milliSeconds)
{
int minutes = 0;
while ((milliSeconds - 60000) > 0)
{
milliSeconds -= 60000;
minutes++;
}
int seconds = 0;
while ((milliSeconds - 1000) > 0)
{
milliSeconds -= 1000;
seconds++;
}
Minutes = minutes;
Seconds = seconds;
MilliSeconds = Convert.ToInt32(milliSeconds);
}
public override string ToString()
{
return Minutes == -1 && Seconds == -1 && MilliSeconds == -1 ? "DNF" : AddZeroWR(Minutes) + ":" + AddZeroWR(Seconds) + "," + AddZeroWR(MilliSeconds);
}
private string AddZeroWR(int i)
{
return i < 10 ? "0" + i : i.ToString();
}
public long ToMilliSeconds()
{
long minutesMilliSeconds = Minutes * 60000;
long secondsMilliSeconds = Seconds * 1000;
return MilliSeconds + minutesMilliSeconds + secondsMilliSeconds;
}
public static List<Time> SortTimes(List<Time> times)
{
List<Time> times_ = new List<Time>();
List<long> milliSeconds_ = new List<long>();
foreach(Time time in times)
{
if(time.ToString() != "DNF")
milliSeconds_.Add(time.ToMilliSeconds());
}
milliSeconds_.Sort();
foreach (long l in milliSeconds_)
{
Time time = new Time(l);
times_.Add(time);
}
return times_;
}
public static Time CalculateAverage(List<Time> list)
{
long timeTogether = 0;
foreach (Time time in list)
{
timeTogether += time.ToMilliSeconds();
}
double d = timeTogether/list.Count;
return new Time(Convert.ToInt64(Math.Round(d)));
}
public static Time CalculateBest(List<Time> list)
{
return SortTimes(list)[0];
}
public static Time CalculateWorst(List<Time> list)
{
return SortTimes(list)[SortTimes(list).Count - 1];
}
public static List<Time> RemoveTime(List<Time> list, Time time)
{
List<Time> times = new List<Time>();
foreach (Time t in list)
{
if(!(t.Minutes == time.Minutes && t.Seconds == time.Seconds && t.MilliSeconds == time.MilliSeconds))
times.Add(t);
}
return times;
}
}
문제가 SortTimes 방법 : I는, 예를 들어 그것의 4 배와 명부가 (mm : SS, MS) 1. 44 : 44,44, 22 (2) : 22, 22, 33 : 33, 33, 4. 11 : 11, 11. 그래서 내 방법으로 목록을 정렬 할 때 예전과 같지 않은 몇 가지 시간이 있습니다. 3. => SORT => 33 : 39,13 또는 그와 비슷한 것으로, 이유를 모르겠습니다. 나는 시간이 길고 뒤에서 변환 할 때 실수가 있다고 생각합니다.
이 오류가 발생한 경우 최소한의 예를 제공해 주시겠습니까? 왜냐하면 내가 코드를 실행 한 후에도 문제를 발견 할 수 없었기 때문이다. –
여기 예제 이미지 : http://i.imgur.com/GXNMVwp.png 두 번째 라인에서 "Zeit 5"는 99 : 99,99이고 "Schlech"도 99 : 99,99이어야하지만 그렇지 않습니다. –
% 연산자를 살펴보십시오. 얼마나 많은 분과 초가 밀리 초 단위인지 계산하는 데 while 루프가 필요하지 않습니다. 나누기와 %를 사용하여 효율적으로 (그리고 안전하게) 계산할 수 있습니다. –