2017-09-20 4 views
0

My Student Records Programm fordert den Benutzer auf, den Vornamen des Schülers einmal in der do while-Schleife einzugeben. Der Benutzer hat die Möglichkeit, die gleichen Daten erneut einzugeben, indem er ja eingibt und die gleiche Frage "Vorname des Schülers eingeben" erscheint zweimal übereinander.Programm fragt die gleiche Antwort zweimal?

Ich habe Haltepunkte in diese While-Schleife eingefügt und sobald der Benutzer "Ja" am Ende der Do wählt, während es bis zur ersten Zeile in der ersten while-Schleife geht, dann die zweite Zeile, die dritte und wieder zurück wieder zum ersten, dann zum zweiten, zum dritten und bricht in die nächste while-Schleife ein und fragt nach dem Nachnamen der Schüler.

Warum spuckt mein Programm beim zweiten Mal der do while-Schleife die erste Frage zweimal hintereinander aus?

package assignment_3; 

import java.util.Scanner; 

/** 
* @author Diego 
*/ 
public class Demo { 

    public static void main (String args[]) { 

    //Instantiating new recordsObject 
     StudentRecords recordsObject = new StudentRecords(); 
     String firstName = ""; 
     String lastName = ""; 
     String idNumber = ""; 
     String major = "";   

     Scanner keyboard = new Scanner(System.in); 

     //Asking the user to enter the students' info 

     do { 

      while (firstName.isEmpty()) { 
       System.out.println("Enter student's first name: "); 
       firstName = keyboard.nextLine(); 
      } 

      while (lastName.isEmpty()) { 
       System.out.println("Enter student's last name: "); 
       lastName = keyboard.nextLine(); 
      } 

      while (idNumber.length() != 9) { 
       System.out.println("Enter student's nine-digit ID#: "); 
       idNumber = keyboard.nextLine(); 
      } 

      while (major.isEmpty()) { 
       System.out.println("Enter student's major: "); 
       major = keyboard.nextLine(); 
      } 

      //Concatinating first name and last name into name 
      String name = firstName + " " + lastName; 

      //Adding the new entry to the StudentArrayList 
      StudentEntry entry = new StudentEntry (name ,idNumber, major); 
      recordsObject.addStudentEntry (entry); 

      //Resetting variables 
      firstName = ""; 
      lastName = ""; 
      idNumber = ""; 
      major = ""; 

      /*If the user enters "yes" then they can submit more. 
      If they enter "no", then all submitted info will be shown */ 
      System.out.println("Type yes to add another entry"); 
     } while (keyboard.next().equalsIgnoreCase("YES")); 
     keyboard.close(); 

     //Printing out those entries 

     System.out.println("Student Records"); 
     System.out.println("---------------"); 
     for (int index = 0 ; index < recordsObject.StudentArrayList.size() ; index++) { 
      System.out.println(recordsObject.StudentArrayList.get(index)); 
      System.out.println(""); 
     } 
    } 
} 
+0

Ich führe Ihren Code und es erscheint nur einmal –

+0

Sie vermasselt Ihr Objekt :) Überprüfen Sie dies, wenn Sie wirklich für Java interessieren: https://www.javatpoint.com/java-oops-concepts –

Antwort

0

Das Problem wird durch die Verwendung von keyboard.next() in Ihrer Haupt-While-Schleife verursacht. Der nächste liest den Zeilenvorschub nicht. Wenn der Benutzer also "Ja" eintippt, liest der Code zum Lesen des nächsten Vornamens automatisch das verbleibende Zeilenvorschubzeichen, wobei firstName immer noch leer bleibt. Und da firstName leer bleibt, wird es ein zweites Mal angezeigt.

Wechsel:

} while (. Keyboard.next() equalsIgnoreCase ("JA"));

To:

} while (keyboard.nextLine() equalsIgnoreCase ("JA").);

Verwandte Themen