2013-06-23 2 views
0

Я относительно новичок в Java, изучая его в ночном режиме. У меня возникли проблемы с правильной настройкой конструктора, чтобы он перемещал значения, введенные в массив. У меня есть код ниже, и кажется, что отдельные поля передаются правильно, но массив не заполнен, и я не могу понять, что я делаю неправильно. Я вернулся через свои заметки, учебники и проверил здесь. Возможно, я слишком долго смотрел на него!Конструктор не настраивает массив

import java.util.Scanner; 


public class Main { 

static Scanner InOut = new Scanner(System.in); 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 
    //* Declare and initalize variables. Set maximum number of students to 6. 
    String surname = "", forename = "", course = "a", newCourse, tmpStu =""; 
    int firstMark = 0, secondMark = 0, thirdMark = 0, finalScore = 0, 
     option = 0, studentCount = 0, delNum, index = 0; 
    final int MAXSTUDENT = 6; 
    Student[] myClass = new Student[MAXSTUDENT]; 


    //* Set class details for the constructor. 

    while (option != 6) { 

     //* Call the menu system to be displayed 
     option = menu(); 

     switch (option) { 
      //* Checks the value return by the menu for the selected option 
      case 1: 
       //* Checks that the maximum number of students has not been exceeded. 
       if (studentCount >= MAXSTUDENT) { 
        System.out.println("Maximum number of student entered. \n\n"); 
        menu(); 
       } else { 

        //* Enter in the student details 
        InOut.nextLine(); /* ensures that the buffer is cleared*/ 

        System.out.println("Enter student surname: "); 
        surname = InOut.nextLine(); 
        System.out.println("Enter student forename: "); 
        forename = InOut.nextLine(); 
        System.out.println("Enter 1st mark: "); 
        firstMark = InOut.nextInt(); 
        System.out.println("Enter 2nd mark: "); 
        secondMark = InOut.nextInt(); 
        System.out.println("Enter 3rd mark: "); 
        thirdMark = InOut.nextInt(); 
        finalScore = 0; 
        //* Passes the entered paramaters to add the student details to the object class. 
        //* Increases the student counter by 1. 
        myClass[studentCount] = new Student(surname, forename, course, firstMark, secondMark, thirdMark, finalScore); 
        System.out.println(myClass[studentCount]); 
        studentCount++; 

       } 
       break; 

      case 2: 
       //* Enter in the student number to be deleted. Number is passed for deletion. 
       //* Reduces the number of student counter. 
       System.out.println("Delete which student?"); 
       delNum = InOut.nextInt(); 
       deleteStudent(delNum, studentCount); 
       studentCount--; 
       break; 

      case 3: 
       //* Allows for the course name to be updated. 
       InOut.nextLine(); /* ensures that the buffer is cleared*/ 
       System.out.println("Enter new course: "); 
       newCourse = InOut.nextLine(); 
       Student.setCourse(newCourse); 
       break; 

      case 4: 
       //* Display all details stored in the object class. 
       for (index = 0; index < studentCount; index = index + 1){ 
       Student.displayDetails(index); 
       } 
       break; 

      case 5: 
       //* Input the surname of student and this name is passed to 
       //* display the details for this student only. 
       InOut.nextLine(); /* ensures that the buffer is cleared*/ 
       System.out.println("Enter surname of student you want to search for: "); 
       String searchName = InOut.nextLine(); 
       //* searchStudent(myClass, searchName, index, studentCount); 
       break; 

      case 6: 
       //* Exit program 
       System.out.println("End of program"); 
       break; 
      default: 
       System.out.println("Invalid option"); 
     } 

    } 

} 

public static int menu() { 

    //* Display menu options and returns selection. 
    System.out.println("****Student Menu****"); 
    System.out.println("1. Add new student details"); 
    System.out.println("2. Delete Student"); 
    System.out.println("3. Change Course"); 
    System.out.println("4. Display All Student Details"); 
    System.out.println("5. Search Student by Name"); 
    System.out.println("6. Exit"); 
    System.out.println("\nInput an option:"); 
    int option = InOut.nextInt(); 
    return option; 
} 



public void addStudent(String surname, String forename, String course, int firstMark, int secondMark, int thirdMark, int finalScore) 
    //* Accepts passed paramaters of student details and adds them into the object class. 
{ 
    System.out.println(surname); 
    System.out.println(forename); 
    System.out.println(course); 
    System.out.println(firstMark); 
    System.out.println(secondMark); 
    System.out.println(thirdMark); 
    System.out.println(finalScore); 





} 

public static void deleteStudent(int delNum, int studentCount) 
    //* Accepts student array number to be deleted and displays details of all 
    //* students still stored. 
{ 
//*  int asize = myClass.length, index; 

//*  for (index = delNum +1; index < asize; index++) 
//*  { 
//*   myClass[index-1] = myClass[index]; 
//*  } 
//*  studentCount --; 
} 

И это называется Студенческий конструктор. Я добавил несколько операторов отображения, чтобы узнать, могу ли я найти, где это происходит, но не повезло. Я думаю, что это может быть связано с вызовом конструктора из основного метода «static void».

import java.util.Scanner; 


public class Student { 

private String surname, forename; 
private int firstMark, secondMark, thirdMark, finalScore, index; 
private int stuCount = 0; 
private final int NUMMARK = 3; 
private static String course = "French"; 
Scanner InOut = new Scanner(System.in); 



public Student(String surname, String forename, String course, int firstMark, int secondMark, int thirdMark, int finalScore) 
{ 
    System.out.println(surname); 
    this.surname = surname; 
    this.forename = forename; 
    this.course = course; 
    this.firstMark = firstMark; 
    this.secondMark = secondMark; 
    this.thirdMark = thirdMark; 
    finalScore = ((firstMark + secondMark + thirdMark)/ NUMMARK); 
    this.finalScore = finalScore; 

} 
public static void setCourse (String newCourse) { 
    course = newCourse; 

} 


private String getDetails() 
    //* Builds student details and returns them to be displayed. 
{ 
    String details = "Student Name: " + surname + ", " + forename +"\n"; 
    details = details + "Course Name: " + course + "\n"; 
    details = details + "Student's Marks: " + firstMark + ", " + secondMark + ", " + thirdMark + "\n"; 
    details = details + "Final Mark: " + finalScore + "\n"; 
    return details; 

} 

public static void displayDetails(int index) 
    //* Displays all student details that have been entered using the student counter 
    //* for the number of times to loop. 
{ 
    //*  if (myClass[index] != null) { 
    //*  System.out.println(myClass[index].getDetails()); 
    //*  } 
} 




} 

ответ

3

Это

myClass[0] = new Student(surname, forename, course, firstMark, secondMark, thirdMark, finalScore); 
studentCount++; 
System.out.println(myClass[0]); 

добавляет каждый новый студент на предыдущем, вы всегда установив первую позицию массива, это должно быть так:

myClass[studentCount] = new Student(surname, forename, course, firstMark, secondMark, thirdMark, finalScore); 
System.out.println(myClass[studentCount]);//BEFORE the counter increment 
studentCount++; 

Side примечание:

Этот код:

System.out.println(myClass[studentCount]); 

Не печатает информацию, которую содержит учащийся. Чтобы распечатать их, вам необходимо переопределить метод toString вашего класса Student, возвращая строку, которую вы хотите напечатать.

+0

studentCount ++; System.out.println (myClass [studentCount]); ????? Измените его –

+0

@SergiiZagriichuk Ну, да, не видел, печать должна быть ** до ** приращения, спасибо – BackSlash

+0

Извинения, я должен был сказать, что пытался выяснить, был ли массив заполнен, поэтому я установил массив 0 для тестирования, но он был возвращен null. Я дважды проверял изменение, чтобы использовать счетчик, но получаю те же результаты. Спасибо за помощь, хотя, его очень ценят! – user2512005

1

Ваш код не содержит серьезных проблем. Вы просто должны изменить некоторые части его следующим образом:

первую очередь, чтобы увидеть getDeatails() метод вашего класса Student вы должны объявить его как защищены: поэтому новая версия, как следовать

protected String getDetails() 

{ 
    String details = "Student Name: " + surname + ", " + forename + "\n"; 
    details = details + "Course Name: " + course + "\n"; 
    details = details + "Student's Marks: " + firstMark + ", " + secondMark + ", " + thirdMark + "\n"; 
    details = details + "Final Mark: " + finalScore + "\n"; 
    return details; 

} 

в первом случае, что вы пишете, это нормально. вам просто нужно использовать соответствующий способ для извлечения данных из массива. так что используйте следующий код:

//* Passes the entered paramaters to add the student details to the object class. 
//* Increases the student counter by 1. 
myClass[studentCount] = new Student(surname, forename, course, firstMark, secondMark, thirdMark, finalScore); 
for(int i = 0;i<=studentCount;i++){ 
    System.out.println(myClass[i].getDetails()); 
    System.out.println("-----------------------"); 
} 
studentCount++; 
System.out.println("now the student count are: "+studentCount); 

следующее для случая 4:

case 4: 
//* Display all details stored in the object class. 
System.out.println("studentcount:"+studentCount); 
for (index = 0; index < studentCount; index = index + 1) { 
    System.out.println(myClass[index].getDetails()); 
    System.out.println("---------------------"); 
} 
break; 
+0

Я думаю, вы знаете fandamentals java, но в некоторых деталях у вас есть проблема. – SirDagh

Смежные вопросы