2017-11-13 20 views
0

私はIDとグレードで記録されたクラスの学生を含むクラス情報を取って整理するプログラムを書いています。私は希望どおりの生徒を追加することができ、希望通りに印刷することができます(したがって、入力が正しいことが分かります)。しかし、生徒を検索すると、最後に入力した生徒IDしか検索できません。検索機能が壊れているのはなぜですか?特定の値を持つオブジェクトのインデックスのarraylistを検索する

検索機能:

public static int studentFinder(ClassSection classOne) { 
     int studentIndex = 0; 
     boolean searchAgain = false; 
     boolean correctStudent = false; 
    do { 
     studentIndex = idFinder(classOne); 
     if (studentIndex == -1) { 
      System.out.println("That student was not found in the class"); 
      System.out.println("Would you like to search again?"); 
       searchAgain = yesNoBool(); 
     } else { 
      System.out.println("You have selected student ID# " +classOne.getStudentIDByIndex(studentIndex)); 
       System.out.println("Is this correct?"); 
        correctStudent = yesNoBool(); 
         if (!correctStudent) { 
          System.out.println("Would you like to search again?"); 
           searchAgain = yesNoBool(); 
         } 
     } 
    } while(searchAgain); 
    return studentIndex; 
    } 

IDファインダーモジュール:

public static int idFinder(ClassSection classOne) { 
     int studentID = 0; 
     String intString = "a Student ID to search for:"; 
     int studentIndex = 0; 
     System.out.println("Please enter a Student ID to search for:"); 
     studentID = intChecker(intString); 
     for (int i = 0; i < classOne.students.size(); i++) { 
      int studentIdTest = classOne.students.get(i).getStudentID(); 
      if (studentIdTest == studentID) { 
       studentIndex = i; 
      } else if (studentIdTest != studentID){ 
       studentIndex = -1; 
      } 
     } 
     return studentIndex; 
    } 

ClassSectionクラス:

import java.util.*; 


public class ClassSection { 
    //instance variables 
    protected int crnNum = 0; 
    protected String deptCode = "null"; 
    protected int courseNum = 0; 
    protected String instructMode = "null"; 
    protected String meetingDays = "null"; 
    protected String meetingTimesStart = "null"; 
    protected String meetingTimesEnd = "null"; 
    protected int classCapacity = 0; 
    protected int classEnrollment = 0; 
    protected int instructorID = 0; 
    protected ArrayList<StudentEnrollee> students = new ArrayList<StudentEnrollee>(); 

    //constructors 
     public ClassSection(int crnNum, String deptCode, int courseNum, String instructMode, String meetingDays, 
       String meetingTimesStart, String meetingTimesEnd, int classCapacity, int classEnrollment, 
       int instructorID) { 
      super(); 
      this.crnNum = crnNum; 
      this.deptCode = deptCode; 
      this.courseNum = courseNum; 
      this.instructMode = instructMode; 
      this.meetingDays = meetingDays; 
      this.meetingTimesStart = meetingTimesStart; 
      this.meetingTimesEnd = meetingTimesEnd; 
      this.classCapacity = classCapacity; 
      this.classEnrollment = classEnrollment; 
      this.instructorID = instructorID; 
     } 


    public ClassSection() { 
     super(); 
     this.crnNum = 0; 
     this.deptCode = ""; 
     this.courseNum = 0; 
     this.instructMode = ""; 
     this.meetingDays = ""; 
     this.meetingTimesStart = ""; 
     this.meetingTimesEnd = ""; 
     this.classCapacity = 0; 
     this.classEnrollment = 0; 
     this.instructorID = 0; 
    } 



    //getters and setters 
     public void getStudents() { 
      this.students.forEach(System.out::println); 
     } 

     public int getStudentIDByIndex(int index) { 
      return this.students.get(index).getStudentID(); 
     } 

     public void addStudent(StudentEnrollee student) { 
      this.students.add(student); 
     } 

     public void removeStudent(int removalIndex) { 
      this.students.remove(removalIndex); 
     } 

     public void changeAddStudentGrade(int studentIndex, int studentGrade) { 
      this.students.get(studentIndex).setStudentGrade(studentGrade); 
     } 

     public int getCrnNum() { 
      return crnNum; 
     } 

     public void setCrnNum(int crnNum) { 
      this.crnNum = crnNum; 
     } 
     public String getDeptCode() { 
      return deptCode; 
     } 
     public void setDeptCode(String deptCode) { 
      this.deptCode = deptCode; 
     } 
     public int getCourseNum() { 
      return courseNum; 
     } 
     public void setCourseNum(int courseNum) { 
      this.courseNum = courseNum; 
     } 
     public String getInstructMode() { 
      return instructMode; 
     } 
     public void setInstructMode(String instructMode) { 
      this.instructMode = instructMode; 
     } 
     public String getMeetingDays() { 
      return meetingDays; 
     } 
     public void setMeetingDays(String meetingDays) { 
      this.meetingDays = meetingDays; 
     } 

     public String getMeetingTimesStart() { 
      return meetingTimesStart; 
     } 


     public void setMeetingTimesStart(String meetingTimesStart) { 
      this.meetingTimesStart = meetingTimesStart; 
     } 


     public String getMeetingTimesEnd() { 
      return meetingTimesEnd; 
     } 

     public void setMeetingTimesEnd(String meetingTimesEnd) { 
      this.meetingTimesEnd = meetingTimesEnd; 
     } 

     public int getClassCapacity() { 
      return classCapacity; 
     } 
     public void setClassCapacity(int classCapacity) { 
      this.classCapacity = classCapacity; 
     } 
     public int getClassEnrollment() { 
      return classEnrollment; 
     } 
     public void setClassEnrollment(int classEnrollment) { 
      this.classEnrollment = classEnrollment; 
     } 
     public int getInstructorID() { 
      return instructorID; 
     } 
     public void setInstructorID(int instructorID) { 
      this.instructorID = instructorID; 
     } 




     //mutators 
     @Override 
     public String toString() { 
      return String.format("Crn Number: %20s \nDept Code: %20s \nInstruction Mode: %20s" 
        + " \nCourse Number: %20s \nClass Capacity: %20s \nClass Enrollment: %20s" 
        + " \nMeeting Days: %20s \nMeeting Times: %8$20s - %9$2s \nInstructor ID: %10$20s \n" + Arrays.toString(students.toArray()).replace("[", "").replace(", S","S").replace("]", "").trim(), 
        crnNum, deptCode, instructMode, courseNum, classCapacity, classEnrollment, meetingDays, 
        meetingTimesStart, meetingTimesEnd, instructorID); 
     } 



} 

のArrayListのオブジェクトからである学生の登録者クラス( ):

public class StudentEnrollee { 
    protected int studentID = 0; 
    protected int studentGrade = 0; 




    public StudentEnrollee() { 
     super(); 
     studentID = 0; 
     studentGrade = 0; 
    } 

    public StudentEnrollee(int studentID, int studentGrade) { 
     super(); 
     this.studentID = studentID; 
     this.studentGrade = studentGrade; 
    } 

    //setters & getters 
    public int getStudentID() { 
     return studentID; 
    } 
    public void setStudentID(int studentID) { 
     this.studentID = studentID; 
    } 
    public int getStudentGrade() { 
     return studentGrade; 
    } 
    public void setStudentGrade(int studentGrade) { 
     this.studentGrade = studentGrade; 
    } 

    @Override 
    public String toString() { 
     return String.format("Student ID: %20s \nStudent Grade: %20s \n", studentID, studentGrade); 
    } 



} 

intcheckerとyesNoBool方法はただ機能をチェックし、確認エラーされているが、ここで彼らは念のためにある:あなたのidFinder方法で

public static int intChecker(String object) { 
    boolean correctInput = false; 
    int userInput = 0; 

    while (!correctInput) { 
     try { 
      userInput = scanner.nextInt(); 
      correctInput = true; 
     } catch(InputMismatchException e) { 
      System.out.println("I'm sorry, that doesn't seem to be a number"); 
      System.out.println("Please enter " +object); 
      scanner.next(); 
     } 
    } 

    return userInput; 
} 


    public static boolean yesNoBool() { 
     String yesNo = ""; 
     boolean yesNoBool = false; 
     System.out.println("Please enter Y/N"); 
     yesNo = scanner.next(); 
     while ((!yesNo.equalsIgnoreCase("n") && !yesNo.equalsIgnoreCase("y"))){ 
      System.out.println("I'm sorry, please enter Y/N"); 
       yesNo = scanner.next(); 
     } 
     if (yesNo.equalsIgnoreCase("y")) { 
      yesNoBool = true; 
     } else if (yesNo.equalsIgnoreCase("n")) { 
      yesNoBool = false; 
     } 


     return yesNoBool; 
    } 

答えて

0

、そうでない場合studentIndexはループがiterratingいるレコードの残りのために上書きされます。また、他にも同じことが必要です。if(studentIdTest != studentID)次のように

はidFinder方法でループでブレイクを追加します。

for (int i = 0; i < classOne.students.size(); i++) { 
     int studentIdTest = classOne.students.get(i).getStudentID(); 
     if (studentIdTest == studentID) { 
      studentIndex = i; 
      break; 
     } else{ 
      studentIndex = -1; 
     } 
    } 

提案を::あなたはとstudentIndexをintializeすることができます-1の代わりに一致するものが見つからない各反復でそれを設定します。

これがあなたの問題を解決することを願っています。

+0

これはそれでした!ありがとうございました! –

+0

@ AaronC.大歓迎です。もしそれがあなたに役立つなら、答えをupvoteしてください。 – Tejendra

0

、あなたはそれを見つけるにもIDを検索するために続けています。 forループでは、IDを見つけたら停止する必要があります。

にループのためにあなたを変更します。あなたはループを切断する必要が試合を見つけたら

public static int idFinder(ClassSection classOne) { 
    String intString = "a Student ID to search for:"; 
    int studentIndex = -1; // Initialize the studentIndex to a negative value since 0 is a valid index 
    System.out.println("Please enter a Student ID to search for:"); 

    int studentID = intChecker(intString); 

    for (int i = 0; i < classOne.students.size(); i++) { 
     int studentIdTest = classOne.students.get(i).getStudentID(); 
     if (studentIdTest == studentID) { 
      studentIndex = i; 
      break; 
     } 
    } 
    return studentIndex; 
} 
+0

これは、ありがとう! –

関連する問題