2017-11-17 13 views
0

なぜ私のaddRecord()メソッドがループしているのか分かりません。具体的には、メソッドの「if/else」の最初のelseで「Enter Sales ID >>」でループします。私は、コードの最後にprogramMenu()メソッドを呼び出そうとしましたが、コンパイラは両方を実行しようとし続けます。このメソッドは、switch caseステートメントで "a"を受け取ったときにのみ実行する必要がありますが、 "a"と "c"の両方が入力されたときに実行され、 "Enter Sales ID >>" 。私のメソッドがループなしでループしているのはなぜですか?

私の方法は、次のようになります。

public static int addRecord(Salesperson[]salesPeopleArray, int 
numOfSalesPpl) 
    { 
     String name=null; 
     String idNum; 
     double salesAmt = 0; 
     String response; 
     numOfSalesPpl = 0; 
     final int MAX_LIMIT=20; 
     final int ID_NUM_LIMIT = 8; 

     if(numOfSalesPpl == MAX_LIMIT) 
     { 
      System.out.print("Database has reached capacity."); 
      System.out.print(" Please delete a record before "); 
      System.out.println("adding to the database."); 
     } 
     else 
     System.out.print("Enter Sales ID:>> "); 
     idNum = userInput.nextLine(); 

     if(idNum.length() != ID_NUM_LIMIT) 
     { 
      System.out.println(">>>>>Sales ID must be 8 digits<<<<<<"); 
      programMenu(); 
     } 
     else 
     { 
      System.out.print("Please enter name: >> "); 
      name = userInput.nextLine(); 
      System.out.print("Sales amount : >> "); 
      salesAmt = userInput.nextDouble(); 
      salesPeopleArray[numOfSalesPpl] = new Salesperson(name, 
idNum,salesAmt);  
      ++numOfSalesPpl; 
      userInput.nextLine(); 
      System.out.print("Do you want to display database> Y/N >>"); 
      response = userInput.nextLine(); 
      if(response.equals("y"))  

      displayDatabase(salesPeopleArray, numOfSalesPpl); 
    } 

    return numOfSalesPpl; 
    } 

私のスイッチケースは次のようになります。

String selection = programMenu(); 
    boolean loop = true; 


    do 
     { 
      switch(selection) 
      { 
       case "A": 
       case "a":      
        addRecord(salesPeopleArray, numOfSalesPpl); 
        break; 

       case "C": 
       case "c": 
        changeRecord(numOfSalesPpl, salesPeopleArray); 
        break; 

       case "Q": 
       case "q": 
       System.out.print("You Are Leaving Database"); 
       System.out.print(" "); 
       loop = false; 
       break; 
      } 
     } 
    while(loop); 

} 

マイprogramMenu()メソッド次のようになります。

public static String programMenu() 
    { 
     String selection; 
    do 

     { 
     System.out.println("===================================="); 
     System.out.println("(A)dd a Record"); 
     System.out.println("(C)hange a Record"); 
     System.out.println("(Q)uit Database"); 
     System.out.print("Enter selection: >> "); 
     selection = userInput.nextLine(); 
      if(!selection.equalsIgnoreCase("a") && 
!selection.equalsIgnoreCase("c") && !selection.equalsIgnoreCase("q")) 
      System.out.println(">>>>Invalid Selection<<<<");   
     System.out.println("===================================="); 

     } 
     while(!selection.equalsIgnoreCase("a") && 
!selection.equalsIgnoreCase("c") && !selection.equalsIgnoreCase("q")); 

     return selection; 
} 

    } 

答えて

0

ここにあなたのコード「選択」が既に値「A」を持っているので、ループした後にユーザ入力(「A/a」)を取得するのは1回だけです。 この行を "String selection = programMenu();"と入力すると、ループ時にユーザー入力が要求され、スイッチのcase文を変更できます。

boolean loop = true; 
    do 
     { 
      String selection = programMenu(); 
      switch(selection) 
      { 
       case "A": 
       case "a":      
        addRecord(salesPeopleArray, numOfSalesPpl); 
        break; 

       case "C": 
       case "c": 
        changeRecord(numOfSalesPpl, salesPeopleArray); 
        break; 

       case "Q": 
       case "q": 
       System.out.print("You Are Leaving Database"); 
       System.out.print(" "); 
       loop = false; 
       break; 
      } 
     } 
    while(loop);  
} 
関連する問題