2016-07-18 6 views
-1

if 함수에 문제가 있습니다. 3 개의 문자열 배열 ("orderID", "id"및 "name")이 있습니다.문이 정렬되지 않고 예상대로 작동하지 않는 경우

  • orderID에는 최대 10 개의 주문 번호가 있습니다.
  • ID와 이름은 거의 모든 음료가 들어있는 데이터베이스입니다.

"orderID"가 "id"와 일치하면 "name"이 목록에 추가되고, 그렇지 않으면 문자열 "Not found in database"가 추가됩니다.

현재 코드 :

The result

문제 : 다음

  string x = "Not found in database"; 
     for (int i = 0; i < id.Length; i++) 
     { 
      foreach (string ids in orderID) 
      { 
       if (ids == id[i]) 
       { 
        listBox1.Items.Add(name[i]); 
        listBox2.Items.Add(name[i]); 
        break; 
       } 

       else 
       { 
        listBox2.Items.Add(x); 
       } 
      } 
     } 

는 결과

  • 2 목록 - "주문 ID"는 "ID"에 일치 할 때, "name"은 목록에 추가되지만 원하는 위치에는 추가되지 않습니다. 데이터베이스의 위치에 따라 추가되는 것 같습니다. 어떻게 피하는거야?
  • 세 번째 목록은 "else"가 추가 된 것과 중복됩니다. 그렇지 않으면 예상대로 작동하지 않습니다. 모든 것을 "데이터베이스에서 찾을 수 없음"을 추가합니다. 어떤 제안이라도 그것을 고치는 방법?
+0

list1과 list2가 무엇을 나타내는 지 알 수 없지만 한 가지 방법은 다른 사람의 목록 상자에 추가하는 것이 좋습니다. 'else {listBox1.Items.Add (name [i]); listBox2.Items.Add (x); }'; 당신의 목록은 첫 번째 것에 대해서는 "Cofee, Cofee"라고하고, 다음에 대해서는 "Jack Daniels, Not Found"라고 말할 것입니다. 당신은'for'와'foreach' 루프를 뒤집을 수도 있고 원치 않을 수도 있습니다. 'break'는 가장 안쪽 루프에서 빠져 나가고 바깥 쪽 루프는 계속 실행된다는 것을 명심하십시오. – Quantic

답변

0

테스트 코드

 var orderIds = new[] {"3", "5"}.ToList(); 
     var ids = new[] { "1", "2", "3", "4", "5" }.ToList(); 
     var names = new[] { "1", "2", "3", "4", "5" }.ToList(); 

     foreach (var orderId in orderIds) 
     {     
      if (ids.Contains(orderId)) 
      { 
       listBox1.Items.Add(names[ids.IndexOf(orderId)]); 
      } 
      else 
      { 
       listBox1.Items.Add("Not in the list"); 
      } 
     } 
+0

테스트 되었습니까? 작동해야하는 것 같습니다. – IAbstract

+0

나는 이것이 좋은 대답이라고 생각하지 않기 때문에 당신을 투표했습니다. 문제가 무엇인지, OP가 그것을 어떻게 해결할 수 있었는지, 그리고 OP가 보여주는 데이터와 당신의 대답이 실제로 닮았는지에 대한 어떠한 설명도하지 않았습니다. – slugster

+0

@slugster 위대한 – Massanu

0

2 목록 - "주문 ID"는 "ID"에 일치 할 때, "이름"이 목록에 추가 있지만 원하는 위치에있다. 나는 데이터베이스에 위치를 추가하고 있다고 생각합니다. 어떻게 피하는거야?

당신은 당신의 품목을 주문 OrderBy()을 사용할 수 있습니다 :이 알파벳 순서로 자신의 콘텐츠에 의해 그들을 주문합니다

List<string> orderedList = list.OrderBy(i => i); 

. 순서를 바꾸려면 OrderByDescending()을 사용할 수 있습니다.

세 번째 목록은 "else"가 추가 된 상태로 복제됩니다. 그렇지 않으면 으로 작동하지 않습니다. 모든 것을 "데이터베이스에서 찾을 수 없음"을 추가합니다. 어떤 제안을 수정하는 방법?

나는 당신의 idorderID 변수는 문자열이나 배열되어 있는지 확실하지 않습니다 (말할 것도 좋을 것이다). 그러나 배열의 경우 원하는 배열 이 포함되어 있는지 확인하고 싶은 경우 하나씩 비교하는 대신 Id이 필요합니다.

for (int i = 0; i < id.Length; i++) 
     { 
      if(orderID.Contains(id[i]) 
      { 
       listBox1.Items.Add(name[i]); 
       listBox2.Items.Add(name[i]);      
      } 
      else 
      { 
       listBox2.Items.Add(x); 
      } 
     } 

문자열의 경우 문자열을 기호로만 비교하고 싶을뿐입니다.

변수 이름을 올바르게 입력하고 질문에 답변하려는 사람들에게 도움이되도록 입력하십시오.

관련 문제