2016-07-06 2 views
1

이 프로그램은 A면과 B면의 값을 취하여 삼각형의 빗변을 계산합니다. 프로그램이 실행되면 사용자에게 4 가지 선택을 제공하며 사용자 A, B, C 또는 Q 중 하나를 입력합니다. 사용자가 A를 입력하면 사용자가 A면의 값을 입력 할 수 있고 4 가지 주요 선택 사항으로 돌아갑니다. 문제는 사용자가 A, B, C 또는 Q를 입력하면 A면을 다시 요청하기 위해 반복됩니다. 아래는 현재 가지고있는 코드입니다. 가치 A를 받아 들일뿐만 아니라 어떻게 만들 수 있습니까? 영원히 같은 값을 될 것입니다 물론 letter 너무 감사if 문을 다시 사용할 수 있습니까? 첫 번째 루프에만 프로그램 루프 수행

public class Newest_Exercise_1 { 

    public static void main(String[] args) {  
     Scanner input = new Scanner(System.in); 
     char letter; 
     int valueOfA; 
     int valueOfB; 
     double hypotenuse; 


     Boolean loop =true; 

     letter = GettingUserInput(input); 
      System.out.println("value of letter: " +letter); 

     while(loop){ 
     if(letter=='A' || letter =='a'){ 
       valueOfA = InputWasA(); 
       System.out.println(valueOfA); 
       letter = GettingUserInput(input); 


     } 
     if(letter=='B' || letter =='b'){ 
       valueOfB = InputWasB(); 
       System.out.println(valueOfB); 
       letter = GettingUserInput(input); 

     } 

     if(letter=='C' || letter =='c'){ 
       System.out.println("made it to C"); 
       hypotenuse = Math.sqrt((valueOfA*valueOfA)+(valueOfB*valueOfB)); 
       System.out.println("Hypotenuse is: "+hypotenuse); 
       letter = GettingUserInput(input); 


     } 
     if(letter=='Q' || letter =='q'){ 
       System.out.println("made it to Q"); 
       System.out.println("Program Closed"); 
       System.exit(0); 
     } 
     } 
    } 

    public static char GettingUserInput(Scanner input){ 


      System.out.println("A-Enter value of side A"); 
      System.out.println("B-Enter value of side B"); 
      System.out.println("C-Calculate"); 
      System.out.println("Q-Quit the program"); 

      String s = input.next(); 
      System.out.println("value of s: "+s); 
      char letter = s.charAt(0); 

      while(letter != 'A' && letter != 'a' && letter != 'B' && letter != 'b' && letter != 'C' && letter != 'c' && letter != 'Q' && letter != 'q'){ 
       System.out.println("Invalid entry, Please try again"); 
       System.out.println("A-Enter value of side A"); 
       System.out.println("B-Enter value of side B"); 
       System.out.println("C-Calculate"); 
       System.out.println("Q-Quit the program"); 
       s = input.next(); 
       letter = s.charAt(0); 
      } 


     return letter; 
    } 

    public static int InputWasA(){ 
     Scanner input = new Scanner(System.in); 
     Boolean loop1 = true; 
     int valueOfA = 0; 

     while(loop1){ 
      try{ 
       System.out.println("Enter value of side A"); 
       valueOfA=input.nextInt(); 
       loop1 = false; 
      } 
      catch(Exception e){ 
       System.out.println("That was not an integer!"); 
       input.next(); 
      } 

     } 
     return valueOfA; 
    } 

    public static int InputWasB(){ 
     Scanner input = new Scanner(System.in); 
     Boolean loop2 = true; 
     int valueOfB = 0; 

     while(loop2){ 
      try{ 
       System.out.println("Enter value of side B"); 
       valueOfB=input.nextInt(); 
       loop2 = false; 
      } 
      catch(Exception e){ 
       System.out.println("That was not an integer!"); 
       input.next(); 
      } 

     } 
     return valueOfB; 
    } 

    public static void InputWasC(){ 
      System.out.println("Made it to InputWasC!"); 
    } 





} 
+0

어떤 입력 사항입니까? –

+0

내 업데이트를 참조하십시오. 그들은 올바른 위치에 초기화됩니다. 하지만 그들은 할당되지 않을 것 같습니다. –

+0

먼저 0이나 -1로 valueOfA와 valueOfB를 초기화해야합니다. 그러면 작동 할 것입니다. 나는 그것을 시험했다. –

답변

2

당신은 한 번만 letter = GettingUserInput(input)을 실행하고 있습니다. 그래서

:

  • 이동이 줄 시작시 루프 내부
  • 다른 곳에서는 그것을 반복하지 마십시오 - 그것은 모든 반복
  • 의 상단에 지금 실행하고 폐기됩니다

    : loop 변수도 단지 true

같은 코드의 모양을 확인 사용 루프 이후 나는 그러나, 다른 개선 사항을 제안 명시된 문제를 일으키는 하나에 불과 유지 저항 한 6,

while (true) { 
    letter = GettingUserInput(input); 
    System.out.println("value of letter: " + letter); 

    if (letter=='A' || letter =='a') { 
     valueOfA = InputWasA(); 
     System.out.println(valueOfA); 
    } 

    // etc 

...

가 있습니다

  • 초기 상태 (편지를 읽기)
  • 종단 테스트 (안 "Q")
  • 반복적 인 작업 (다른 편지를 읽기)

가장 명확하고 코드는 for입니다. 마지막 라인이 있어야한다, 즉 또한, 모든 이중 경우 테스트를 방지하기 위해 GettingUserInput() 메소드는, 소문자를 반환해야합니다 :

는 변화를 감안할 때, 여기
return Character.toLowerCase(letter); 

내가 루프 모양한다고 생각하는 방법 :

for (char letter = GettingUserInput(input); letter != 'q'; letter = GettingUserInput(input)) { 
    if (letter =='a') { 
     valueOfA = InputWasA(); 
     System.out.println(valueOfA); 
    } 

    if (letter =='b') { 
     valueOfB = InputWasB(); 
     System.out.println(valueOfB); 
    } 

    if (letter =='c') { 
     System.out.println("made it to C"); 
     hypotenuse = Math.sqrt((valueOfA*valueOfA)+(valueOfB*valueOfB)); 
     System.out.println("Hypotenuse is: "+hypotenuse); 
    } 
} 

System.out.println("Program Closed"); 

글자 q의 코드는 단순히 루프를 따르는 코드에 불과합니다.

+0

당신은 루프 안의 전화를 놓쳤습니까? 그는 후속 통화에서 값을 지정하지 않습니다. –

+0

@ 리차드 네, 그 역시 그걸 nuked.thx – Bohemian

+0

왜 사실을 신경 쓰지 않거나 루프의 첫 번째 줄을 만드나요? 이 경우에는 while ((문자 = Character.toLowerCase (GettingUserInput()))! = 'q') ... '라고 말하는 것이 훨씬 더 합리적 일 것입니다. 'a', 'b'또는 'c'와 같은 문자를 확인하거나, 해당 작업을 수행하거나, 그렇지 않으면 루프를 계속 수행합니다. 'q'이면 루프가 끝나고 끝납니다. –

관련 문제