2016-07-06 4 views
1

このプログラムは、サイドAとBの値を取って三角形の斜辺を計算するために作成されています。プログラムが実行されると、ユーザーには4つの選択肢があり、ユーザーA、B、C、またはQのいずれかを入力します。ユーザーがAを入力すると、ユーザーはA面の値を入力できるようになり、4つの主要な選択肢に戻ります。問題は、ユーザーがA、B、C、またはQを入力すると、それがループしてサイドAを再度要求することです。以下は現在私が持っているコードです。私はそれを作るだけで価値Aを受け入れることはできないのですか?もちろんletterの永遠に同じ値になりますので、おかげでif文を再利用できますか?プログラムは最初の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

まず、valueOfAとvalueOfBを0または-1に初期化する必要があります。それは動作します。私はそれをテストしました。 –

答えて

2

あなたは一度だけletter = GettingUserInput(input)を実行しています。

ので:スタート

    • 移動このライン内側のループはどこにもそれを繰り返してはいけない - それはすべての反復
    • の上部に今実行しますとスクラップ

      loop変数あまりにも、ちょうどのようなコードを見てくださいtrue

    を使用

    • 初期状態(手紙を読む)
    • を:私はあなたのループがありますので、しかし...

      を、他の改善を示唆して述べた問題の原因1にちょうど保つ抵抗してきた

      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'の場合はループが終了し、そのループが終了します。 –

    関連する問題