2016-07-07 2 views
0

for 루프에 텍스트 파일을 파싱 할 때 배열의 최소값과 최대 값을 찾도록 추가 중입니다. 최대 값을 찾는 것은 충분히 쉬웠지만, 분당 1이되어야하는 곳에서 0의 값을 얻습니다. 여기 루프에 대해 사용하고있는 것이 있습니다. (지금까지는 온도의 최소값을 얻기 위해 테스트를하고 있습니다. x)for 루프에 최소값을 찾는 스크립트 추가 C#

 for (int i = 0; i < lineCount; i++) { 

     string line = dataLines [i]; 
     lineValues = line.Split (' '); 

     Vector4 temp = new Vector4(); 
     Vector3 center = new Vector3(); 

     temp.x = float.Parse (lineValues [0]); 

     maxvalueX = float.MinValue; 
     minvalueX = float.MaxValue; 

     if (temp.x > maxvalueX) { maxvalueX = temp.x; } 
     if (temp.x < minvalueX) { minvalueX = temp.x; } 

     temp.y = float.Parse (lineValues [1]); 
      if (temp.y > maxvalueY) { maxvalueY = temp.y; } 

     temp.z = float.Parse (lineValues [2]); 
      if (temp.z > maxvalueZ) { maxvalueZ = temp.z; } 

     temp.w = float.Parse (lineValues [3]); 

     data.myData [i].Set (scaleFactor*temp.x, scaleFactor*temp.y, scaleFactor*temp.z, temp.w); 
     data.myData [i].Set (scaleFactor*temp.x, scaleFactor*temp.y, scaleFactor*temp.z, temp.w); 
     //int value = data.myData [i].x; 

     center.x = ((maxvalueX-1)/2); 
     center.y = ((maxvalueY-1)/2); 
     center.z = ((maxvalueZ-1)/2); 

     data.dataCenter.Set (scaleFactor*center.x, scaleFactor*center.y, scaleFactor*center.z); 
    } 

여기서 잘못된 점에 대한 아이디어는 크게 감사하겠습니다. 고맙습니다! 젠

+0

보십시오 : 내가 무슨 뜻인지 보여 주석 코드의 전체 업데이트 버전을 포함 시켰습니다

최소값을? 일반적으로'float.MaxValue'와 같은 것으로 설정하고 싶을 것입니다. 초기화하지 않으면 기본적으로 0보다 작고 1보다 작습니다. 모든 값이 음수이면 max와 동일한 유형의 이슈를 가지므로 실제로는 float .MinValue'. – juharr

+0

왜 dataLines.Min()을 사용하지 않습니까? 가장 작은 것을 얻으려면? – Naeim

+1

값을 재설정하지 않으려면 루프 앞에 'maxvalueX = float.MinValue;'및 'minvalueX = float.MaxValue;'를 입력해야합니다. – Octopoid

답변

6

최소 값을 찾는 가장 쉬운 방법은 즉, 당신은 최대 값했던 것과 반대를하는 것입니다

if (temp.x > maxvalueX) { maxvalueX = temp.x; } 
if (temp.x < minvalueX) { minvalueX = temp.x; } 
이 가능하다면

는 분에 가장 낮은 값은 0 이상 베어 있다는 것을 또는 가장 높은 값이 0보다 작 으면 최대 및 최소 기본값을 0으로 설정하면 문제가 발생할 수 있습니다. 루프를 시작하기 전에 다음과 같이 설정해야합니다.

float maxvalueX = float.MinValue; 
float minvalueX = float.MaxValue; 

이렇게하면 발생하는 값에 관계없이 숫자가 재설정됩니다. 자신이 고려해야 할 가치가없는 경우도 처리해야합니다.


UPDATE :

// These should be before the loop just to avoid resetting the max/min values 
float maxvalueX = float.MinValue; 
float minvalueX = float.MaxValue; 

    for (int i = 0; i < lineCount; i++) { 

    string line = dataLines [i]; 
    lineValues = line.Split (' '); 

    Vector4 temp = new Vector4(); 
    Vector3 center = new Vector3(); 

    temp.x = float.Parse (lineValues [0]); 
    if (temp.x > maxvalueX) { maxvalueX = temp.x; } 
    if (temp.x < minvalueX) { minvalueX = temp.x; } 

    temp.y = float.Parse (lineValues [1]); 
     if (temp.y > maxvalueY) { maxvalueY = temp.y; } 

    temp.z = float.Parse (lineValues [2]); 
     if (temp.z > maxvalueZ) { maxvalueZ = temp.z; } 

    temp.w = float.Parse (lineValues [3]); 

    data.myData [i].Set (scaleFactor*temp.x, scaleFactor*temp.y, scaleFactor*temp.z, temp.w); 
    data.myData [i].Set (scaleFactor*temp.x, scaleFactor*temp.y, scaleFactor*temp.z, temp.w); 
    //int value = data.myData [i].x; 
} 

// I've moved these out of the loop as they only use the final max/min values 
    center.x = ((maxvalueX-1)/2); 
    center.y = ((maxvalueY-1)/2); 
    center.z = ((maxvalueZ-1)/2); 

    data.dataCenter.Set (scaleFactor*center.x, scaleFactor*center.y, scaleFactor*center.z); 
+0

나는 이것을 추가했으며 최소값을 최대 값으로 변경합니다. - 감사합니다! – jrogers12

+0

당신은 실수로'minvalueX' 대신에'maxvalueX'를 실수로 사용하지 않았습니까? 선을 복사하여 붙여 넣을 때 쉽게 수행됩니다. – Octopoid

+0

정말 고마워요! 나는 float을 넣었다. maxvalueX = float.MinValue; float minvalueX = float.MaxValue; 루프. 다시 한 번 감사드립니다! – jrogers12

0

은 무엇입니까이

if (minvalueX < temp.x) 
{ 
    valueX = temp.x; 
    minvalueX = valueX; 
} 
+0

나는 이미 그걸 시도했지만 고마워 !! – jrogers12