2016-10-03 5 views
1

내 프로그램이 마지막 "else"문으로 건너 뛰는 이유를 알 수 없습니다. 이것은 다음과 같은 코드이기도합니다. 방금 Java를 처음 시작했기 때문에 조금 거칠었습니다. 다른 것이 있으면 그냥 물어보십시오!내 if, else 문에 문제가 발생했습니다.

우리가 작성해야하는 프로그램은 사물함 조합을 얻는 데 사용됩니다. 나는 내가 원하는 콤비네이션을 하드 코딩했고 프로그램은 12-34-56을 입력 할 때 작동한다. 그러나 12-12-34 또는 다른 변형을 입력하면 자동으로 프로그램 끝으로 건너 뛰고 결과가 아니더라도 일치하지 않음이라고 표시됩니다. 대신 그것은 "2 개의 숫자가 서로 중복되어 있다는 것을 추측해야합니다 .2 개의 숫자가 조합에 나타납니다."

다른 것이 필요한 경우 알려주세요. 감사합니다. 좋은 하루 되세요! (또한 나는이 모든 것을 할 자바와 BlueJ를 사용하고 있습니다.) 마지막 두 다른-경우-조건 두 가지 문제

import java.util.*; 
public class Combination 
{ 

public static void main(String[] args) { 

     int lock1 = 12; 
     int lock2 = 34; 
     int lock3 = 56; 

     Scanner input = new Scanner(System.in); 

     System.out.print("Enter first two digits: "); 
     int guess1 = input.nextInt(); 
     System.out.print("Enter second two digits: "); 
     int guess2 = input.nextInt(); 
     System.out.print("Enter last two digits: "); 
     int guess3 = input.nextInt(); 

     if (lock1 == guess1 && lock2 == guess2 && lock3 == guess3) { 
      System.out.print("Exact Match! Locker Unlocked"); 
     } 
     else if (lock1 == guess1 && lock2 == guess3 && lock3 == guess2 
     || lock1 == guess2 && lock2 == guess3 && lock3 == guess1 
     || lock1 == guess2 && lock2 == guess1 && lock3 == guess3 
     || lock1 == guess3 && lock2 == guess2 && lock3 == guess1 
     || lock1 == guess3 && lock2 == guess1 && lock3 == guess2) 
     { 
      System.out.println("All numbers match but not in the correct order"); 
     } 
     else if (lock1 == guess1 && lock2 == guess1 && lock3 == guess1 
     || lock1 == guess2 && lock2 == guess2 && lock3 == guess2 
     || lock1 == guess3 && lock2 == guess3 && lock3 == guess3) { 
      System.out.println("Guess contains 3 duplicate numbers."); 
      System.out.println("One number in the guess appears in the combination."); 
     } 
     else if (lock1 == guess1 && lock2 == guess1 && lock3 == guess2 
     || lock1 == guess1 && lock2 == guess1 && lock3 == guess3 
     || lock1 == guess2 && lock2 == guess2 && lock3 == guess3 
     || lock1 == guess2 && lock2 == guess2 && lock3 == guess1 
     || lock1 == guess3 && lock2 == guess3 && lock3 == guess2 
     || lock1 == guess3 && lock2 == guess3 && lock3 == guess1 
     || lock1 == guess2 && lock2 == guess1 && lock3 == guess1 
     || lock1 == guess3 && lock2 == guess1 && lock3 == guess1   
     || lock1 == guess3 && lock2 == guess2 && lock3 == guess2 
     || lock1 == guess1 && lock2 == guess2 && lock3 == guess2 
     || lock1 == guess1 && lock2 == guess3 && lock3 == guess3 
     || lock1 == guess2 && lock2 == guess3 && lock3 == guess3) { 
      System.out.println("2 numbers in the guess are duplicates of each other." + 
      "2 numbers guess appear in the combination."); 
     } 
     else{ 
     System.out.println("Sorry not a match"); 
     } 


    } 
} 
+0

부울 논리가 원하는대로 작동하는지 확신합니까? 아마도 괄호가 필요할까요? – bradimus

+1

아 ... 당신은 당신의 논리와 구문에 대해 정말로 재고 할 필요가 있습니다. –

+0

쉬운 :'lock1 == guess2'가 잘못되었습니다. –

답변

1

있습니다

  1. lockguard 필요가 교환 될가 . 우리는 항상 세 가지 추측을 모두 확인하고자합니다. 현재 하나의 추측은 두 번/세 번 확인되고 한 두 가지 추측은 무시됩니다. 특히 마지막 두 번째 else-if는 lock1 = lock2 = lock3 인 경우에만 입력 할 수 있습니다. 문제를 발견하는 또 다른 방법 : Guess contains 3 duplicate numbers.을 알기 위해서는 세 가지 추측을 모두 확인해야합니다. Currenlty는 하나의 추측 만 확인합니다 (사례별로).

  2. 마지막 else-if-condition에 일부 분리 기호가 누락되었습니다. 동일한 추측을 정확하게 두 번 입력하는 18 가지 가능한 경우가 있으며, 프로그램은 단지 12 가지만 검사합니다.

여기에는 현재 및 누락 된 사례가 있습니다. 각 숫자는 세 가지 추측 중 하나를 나타냅니다. 제가

guess1 == lock1 && guess2 == lock1 && guess3 == lock1 
|| guess1 == lock2 && guess2 == lock2 && guess3 == lock2 
|| guess1 == lock3 && guess2 == lock3 && guess3 == lock3 

내지 제 마지막 다른-IF 조건을 변경하고

guess1 == lock1 && guess2 == lock1 && guess3 == lock2 
|| guess1 == lock1 && guess2 == lock1 && guess3 == lock3 
|| guess1 == lock1 && guess2 == lock2 && guess3 == lock1 
|| guess1 == lock1 && guess2 == lock2 && guess3 == lock2 
|| guess1 == lock1 && guess2 == lock3 && guess3 == lock1 
|| guess1 == lock1 && guess2 == lock3 && guess3 == lock3 
|| guess1 == lock2 && guess2 == lock1 && guess3 == lock1 
|| guess1 == lock2 && guess2 == lock1 && guess3 == lock2 
|| guess1 == lock2 && guess2 == lock2 && guess3 == lock1 
|| guess1 == lock2 && guess2 == lock2 && guess3 == lock3 
|| guess1 == lock2 && guess2 == lock3 && guess3 == lock2 
|| guess1 == lock2 && guess2 == lock3 && guess3 == lock3 
|| guess1 == lock3 && guess2 == lock1 && guess3 == lock1 
|| guess1 == lock3 && guess2 == lock1 && guess3 == lock3 
|| guess1 == lock3 && guess2 == lock2 && guess3 == lock2 
|| guess1 == lock3 && guess2 == lock2 && guess3 == lock3 
|| guess1 == lock3 && guess2 == lock3 && guess3 == lock1 
|| guess1 == lock3 && guess2 == lock3 && guess3 == lock2 

마지막 다른-IF 조건 후

missing|present 
-------+------- 
     112 
     113 
121 
     122 
131 
     133 
     211 
212 
     221 
     223 
232 
     233 
     311 
313 
     322 
323 
     331 
     332 

프로그램 I 점검 * 정확 가능한 모든 조합은 스크립트를 사용합니다.

힌트 : 배열과 루프를 대신 사용하면 프로그램이 더 쉽고, 깔끔하고 확장 될 수 있습니다.

+0

Socowi 그래서 내 추측과 자물쇠를 교환해야합니까? 왜 다른 방향으로 작동하지 않을까요? 그것은 lock1을 검사하고 그것이 일치하면 나머지를 확인하지 않고 계속 진행하기 때문입니까? –

+0

예, 스왑하고 누락 된 부분을 추가해야합니다. 조기 퇴출 (나머지를 확인하지 않고 계속 진행)은 문제가 아닙니다. 논리가 잘못되었습니다. 앞서 언급 한 것처럼 'lock1 == guess1 && lock2 == guess1 && lock3 == guess1'을 자세히 살펴보면 lock1 = lock2 = lock3 (여기서는 해당되지 않음)에만 해당 될 수 있습니다.또는 다른 말로하면 : '추측에는 3 개의 중복이 있습니다'라는 것을 알기 위해서는 세 가지 추측을 모두 살펴 봐야합니다. Currenlty, 당신은 하나만보고 있습니다. – Socowi

+0

오, 당신이 말하는 것을보세요! 큰 도움에 감사드립니다! 내가 말했듯이 나는 코딩에 새로운데 (3 주째), 그래서이 중 일부는 여전히 나에게 매우 새로운 것이다. 좋은 하루 되세요! –

관련 문제