2014-09-14 2 views
1

오브젝트 유형 배열의 요소를 사용자 입력과 비교하려고합니다. 그렇게하기 위해 다음 코드를 작성했습니다. 코드에 오류가 없지만 예상대로 객체 비교가 작동하지 않는다는 것을 알았습니다. 미리 정의 된 배열과 사용자 입력을 비교하기 위해 코드를 편집하려면 어떻게해야합니까?C에서 오브젝트 배열 비교 #

class Program 
{ 
    static void Main(string[] args) 
    { 
     object[] Mathfunction = new object[] { '+','-','*','/'}; 
     Console.WriteLine("Enter"); 
     object input = Console.ReadLine(); 
     for(int i=0;i<4;i++) 
     { 
      if (Mathfunction[i] == input) 
      { 
       Console.WriteLine("done"); 
       Console.ReadLine(); 
      } 
     } 
    } 
+0

4 개의 별도 'if'문을 사용하지 않는 이유는 무엇입니까? –

+0

@ Okuma.Scott, 유지하고 이해하는 것이 더 힘들다면. 이것은 여기에 설명되어 있습니다. http://stackoverflow.com/questions/1554180/why-is-the-if-statement-considered-evil – codea

답변

3

당신은 char들 박스에 string의를 비교하고 있습니다.
이들은 평등하지 않을 것입니다.

변수를 object 대신 사용중인 실제 데이터 유형으로 선언해야합니다. 그런 다음 컴파일러가 잘못된 작업을 알려줌으로써 수정할 수 있습니다.

1

숯을 객체로 변환해야하는 이유가 있습니까? 아니요, 다시 char []로 변환하고 비교가 수정되도록 제안합니다. 그렇지 않으면 두 객체를 비교할 때 실제로 (char) 값이 아닌 두 개의 참조를 비교합니다. 배열을 초기화 할 때 하나의 객체가 생성 되었기 때문에 하나의 객체가 사용자에 의해 입력되고 그 중 두 객체는 ​​결코 같지 않으며 비교는 결코 true를 반환하지 않습니다. 내 변경이

object[] Mathfunction = new object[] { '+', '-', '*', '/' }; 
Console.WriteLine("Enter"); 
object input = Console.ReadLine(); 
string[] inputString = input.ToString().Split(' '); 
bool isEqual = true; 
for (int i = 0; i < 4; i++) 
{ 
    if (Mathfunction[i].ToString() != inputString[i]) 
    { 
     isEqual = false; 
    }    
} 
if (isEqual) 
{ 
    Console.WriteLine("done"); 
    Console.ReadLine(); 
} 
0

는 다음과 같이 할 수있는, 당신은 문자를 저장하는 객체의 배열을 사용하는 동안 이런 일이, 당신의 코드에 입력이 하나의 객체에있을 것입니다 시도 지금 내가 기대했던대로 작동합니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     object[] Mathfunction = new object[] { '+','-','*','/'}; 
     Console.WriteLine("Enter"); 
     String input = Console.ReadLine(); 
     for(int i=0;i<4;i++) 
     { 
      String str = (Mathfunction[i].ToString()); 
      if (String.Equals(str,input)) 
      { 
       Console.WriteLine("done"); 
       Console.ReadLine(); 
      } 
     } 
    }