2013-07-13 1 views
-1

의 논리적 버그를 알아야합니다.어떤 이유로 변수의 값을 검색하기 위해 메소드의 'if'문이 실행되지 않은 경우 어떤 이유로 'getUnknownsAccel'메서드를 호출 할 때 내 코드

루프를 알 수있는 다른 변수의 이름을 검색하는 데 사용하는 동안
PhysicsProblem problem1 = new PhysicsProblem(accel, vI, vF, t, deltaX); 

    System.out.println("Which variable are you solving for? "); 
    String solveFor = scan.next(); 


    // after receiving solveFor input, assesses data accordingly 

    if (solveFor.equalsIgnoreCase("acceleration")) 
    { 
     System.out.println("Solving for Acceleration!"); 
     System.out.println("Are there any other unknowns? (enter 'none' or the name " + 
       "of the variable)"); 
     missingVar = scan.next(); 
     problem1.setMissingVar(missingVar); 
     do 
     { 
      problem1.getUnknownsAccel(); 
      System.out.println("Are there any other unknowns? (enter 'none' or the name " + 
        "of the variable)"); 
      missingVar = scan.next();    //// change all these in the program to scan.next, not scan.nextLine 
     } 
     while (!missingVar.equalsIgnoreCase("none") || !missingVar.equalsIgnoreCase("acceleration")); 

     if (missingVar.equals("none")) 
     { 
      // Write code for finding solutions 
      System.out.println("Assuming you have given correct values, the solution is: "); 
     } 
    } 

가 할 일 후/I이 클래스 파일에서 getUnknownsAccel의 메소드를 호출

public void getUnknownsAccel() 
{ 
    //----------- 
    // checks for another unknown value that is not accel 
    //----------- 
    if (missingVar.equalsIgnoreCase("time")) 
    { 
     System.out.println("Please enter the value for time: "); 
     t = scan.nextDouble(); 
     while (t <= 0 || !scan.hasNextDouble()) 
     { 
      System.out.println("That is not an acceptable value!"); 
      t = scan.nextDouble(); 
     } 
    }  

} 

은의이 문제를 위해 가정 해 봅시다 , 사용자는 프롬프트 될 때 알려지지 않은 "시간"을 입력하게됩니다. 내 코드가 시간 변수 값을 검색하기 위해 스캔 기능을 실행하지 않는 이유는 무엇입니까? 대신 프로그램은 system.out 함수를 반복합니다. "다른 알 수없는 항목이 있습니까?"

+0

getUnknownsAccel()을 입력하면'missingVar'의 정확한 값은 무엇입니까? 디버거를 편리하게 사용하지 못한다면 문제를 해결해야하지만, 그 동안에는'if()'전에 다시 출력하십시오. –

+0

메시지가 나타나면 사람이 "시간"을 입력한다고 가정합니다. 나는 getUnknownsAccel()을 호출 할 때 missingVar가 "time"과 같을 것이라고 가정합니다. 내가 잘못? – TommyD

+3

안녕하세요. 코드에서 오류를 발견하도록 사람들에게 요청하는 것은 특히 생산적이지 않습니다. 디버거를 사용하거나 인쇄 문을 추가하여 프로그램의 진행 상황을 추적하고 발생할 것으로 예상되는 것과 비교하여 문제를 격리해야합니다. 이 둘이 갈라지면 문제를 발견했습니다. (그리고 필요하다면 [최소 테스트 케이스] (http://sscce.org)를 구성해야합니다.) –

답변

2

스캔 후 missingVar를 scan.next()로 설정했지만 아무 것도하지 않습니다. 루프가 계속됩니다.

missingVar = scan.next(); 

이 라인을

getUnknownsAccel(); 

메모를 추가

후, 또 다른 문제는 나중에 처리해야한다는 것입니다 missingVar 지역이라는 것이다 - getUnknownsAccel()에 액세스하려면 다음을 수행해야 선언을

public void getUnknownsAccel(String missingVar){ 
} 

으로 변경하고 대신 getUnknow nsAccel (missingVar);

+0

'missingVar'는 지역 변수라는 것을 모릅니다. 사실, 그것은 클래스의 인스턴스 변수로 보입니다. 그리고 그것의 선언은 질문에 포함되지 않습니다. –