2014-09-03 2 views
0

아마 꽤 멋진 새 질문이지만 여기에 나와 있습니다.클래스/메소드가 올바른 값을 반환하지 않습니다.

나는 이것에 아주 새롭다. 그리고 지금 나는 내가 생각하는 나의 첫번째 논리 문제에 이르렀다.

나에게 Int32 값을 반환해야하는 클래스 + 메서드를 만들었으며, 내 눈에 닿지 않는 최소한의 것을 반환합니다. 나는 또한이 값이 반환되기를 원하지 않는다.

내가 중 하나를 누르면 : 여기

코드입니다 :

public static Int32 SetInterval(ConsoleKeyInfo cki) 
    { 
     if (cki.Key == ConsoleKey.D1 || cki.Key == ConsoleKey.D2 || cki.Key == ConsoleKey.D3 || cki.Key == ConsoleKey.D4 || cki.Key == ConsoleKey.D5 || cki.Key == ConsoleKey.D6) 
     { 
      if (cki.Key == ConsoleKey.D1) 
      { 
       return 10000; 
      } 
      else if (cki.Key == ConsoleKey.D2) 
      { 
       return 20000; 
      } 
      else if (cki.Key == ConsoleKey.D3) 
      { 
       return 30000; 
      } 
      else if (cki.Key == ConsoleKey.D4) 
      { 
       return 45000; 
      } 
      else if (cki.Key == ConsoleKey.D5) 
      { 
       return 60000; 
      } 
      else if (cki.Key == ConsoleKey.D6) 
      { 
       return 120000; 
      } 
     } 
     else 
     { 
      SetInterval(Console.ReadKey()); 
     } 
     return 50; 
    } 

그리고 여기에 내가 내 메인 클래스 내에서 실행하는 방법입니다

 static int interval; 

     interval = DefineInterval.SetInterval(Console.ReadKey()); 
     Console.WriteLine(""); 
     Console.WriteLine(interval.ToString()); 

지금 일어나고 무슨 그래서입니다 전에 다른 키를 누르지 않고도 6 자리 숫자를 올바르게 입력 할 수 있습니다. 출력은 정상이며 예상대로입니다. 내가 누를 때

는 다시, 내 키보드의 예 "A6"를 위해 내가 가진 전부입니다

" A6 "

어떤 아이디어? 또한 아마 그런 일을하는 가장 좋은 방법은 아닙니다.

+1

출력 결과는 다음과 같습니다. 'else' 블록에서 SetInterval (Console.ReadKey())를 반환하겠습니까? –

+0

외부 if 문을 제거 할 수 있습니다. 아무 것도하지 않습니다. – Jonesopolis

+0

'switch' 문도 사용하십시오. – arao6

답변

2

. 당신이 원하는 것은 다음과 같습니다.

public static Int32 SetInterval(ConsoleKeyInfo cki) 
{ 
    if (cki.Key == ConsoleKey.D1) 
    { 
     return 10000; 
    } 
    else if (cki.Key == ConsoleKey.D2) 
    { 
     return 20000; 
    } 
    else if (cki.Key == ConsoleKey.D3) 
    { 
     return 30000; 
    } 
    else if (cki.Key == ConsoleKey.D4) 
    { 
     return 45000; 
    } 
    else if (cki.Key == ConsoleKey.D5) 
    { 
     return 60000; 
    } 
    else if (cki.Key == ConsoleKey.D6) 
    { 
     return 120000; 
    } 
    else 
    { 
     return SetInterval(Console.ReadKey()); 
    } 
} 

체인이있는 경우 첫 번째 else if 문을 옮겼습니다.

0
public static Int32 SetInterval(ConsoleKeyInfo cki) 
{ 
    if (cki.Key == ConsoleKey.D1 || cki.Key == ConsoleKey.D2 || cki.Key == ConsoleKey.D3 || cki.Key == ConsoleKey.D4 || cki.Key == ConsoleKey.D5 || cki.Key == ConsoleKey.D6) 
    { 
     if (cki.Key == ConsoleKey.D1) 
     { 
      return 10000; 
     } 
     else if (cki.Key == ConsoleKey.D2) 
     { 
      return 20000; 
     } 
     else if (cki.Key == ConsoleKey.D3) 
     { 
      return 30000; 
     } 
     else if (cki.Key == ConsoleKey.D4) 
     { 
      return 45000; 
     } 
     else if (cki.Key == ConsoleKey.D5) 
     { 
      return 60000; 
     } 
     else if (cki.Key == ConsoleKey.D6) 
     { 
      return 120000; 
     } 
    } 
    else 
    { 
     return SetInterval(Console.ReadKey()); 
    } 
} 
0

귀하의 방법을 재귀 적으로 호출하고 있습니다. 올바른 입력을하면 잘됩니다.

그렇지 않으면 올바른 입력을 얻고 그 올바른 입력 후에 메소드의 첫 번째 호출에서 기본값을 반환합니다.

솔루션 :

는 그냥 return 50 및 설정을 제거 : else 블록의 SetInterval에 재귀 호출이 반환 값이 아무것도하지 않는

else 
{ 
    return SetInterval(Console.ReadKey()); 
} 
-1

빠른 질문 - 왜 "a6"을 누르시겠습니까? 그것은 실수로 당신이 당신의 프로그램에 의해 단지 6으로 읽혀지기를 원한다면, 그 뒤의 다른 이유가 있습니까? 그 이유가 있다면 return 50을 제거하고 else에 SetInterval (Console.ReadKey())을 반환해야합니다.

관련 문제