2014-01-26 5 views
0

Просто чтобы дать бежать вниз, что я пытаюсь сделать, вот HW мой профессор дал мне:Массив Студента объектов Java

  1. Определите класс Student, который проходит Person. Он добавляет атрибуты

Int Test1, test2, test3 Двойной средний класс Строка

Он имеет методы computeaverage() и calculategrade(). Оценки основаны на среднем значении: выше 90 A, от 80 до 90 a B, от 70 до 80 a C и т. Д. Все остальные атрибуты имеют набор и получение.

  1. Напишите приложение, которое использует массив типа студента размера 20. Программа запрашивает у пользователя, сколько студентов в классе, а затем позволяет им войти студент и их результаты тестов, а затем вычисляет их оценки и распечатывает список студентов и их классы.

Это, как говорится ...

В четверг я увидел код одноклассников, что он получил от учителя, и он что-то, что я не видел в моем студенческом классе по линии 37 (Student Конструктора). Вместо того, чтобы иметь геттеры и сеттеры, у него был код, подобный тому, что у меня есть в строке 37. Но я понятия не имею, что он сделал и правильное кодирование. Поэтому я надеялся, что кто-то здесь может сказать мне, что я делаю неправильно, и как этот код может уйти без использования методов getter и setter ???

public class Person { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) 
    { 



     Scanner kbd = new Scanner(System.in); 
     Student newStudent = new Student(); 
     int size; 

     System.out.println("Enter the amount of students:"); 
     size = kbd.nextInt(); 
     Student[] myStudent = new Student[size]; 
     String firstName; 
     String lastName; 
     int test1, test2, test3; 
     Student s; 

     for (int i=0; i < size; i++) 
     { 

     System.out.println("Enter first name of student: " + i); 
     firstName = kbd.next(); 

     System.out.println("Enter last name if student: " +i); 
     lastName = kbd.next(); 

     System.out.println("Please Enter first test score: "); 
//  JOptionPane.showInputDialog("Please enter first test score:"); 
     test1= kbd.nextInt(); 

     System.out.println("Please enter second test score"); 
//  JOptionPane.showInputDialog("Please enter second test score:"); 
     test2= kbd.nextInt(); 

     System.out.println("Please enter third test score"); 
//  JOptionPane.showInputDialog("Please enter third test score:"); 
     test3=kbd.nextInt(); 

//  s = new Student (test1, test2, test3, firstName, lastName); 
     myStudent[i].setTest1(test1); 
     myStudent[i].setTest2(test2); 
     myStudent[i].setTest3(test3); 
     myStudent[i].setfName(fName); 
     myStudent[i].setlName(lname); 


     } 
     for (int i = 0; i < size; i++) 
     { 
      System.out.println(myStudent[i].getGrade()); 
     } 



    } 
} 


public class Student extends Person{ 

    int test1, test2, test3; 
    double average; 
    String grade, firstName, lastName; 


    public Student() 
    { 
     test1 = 0; 
     test2 = 0; 
     test3 = 0; 
     average = 0; 


    } 




    public Student(int test1, int test2, int test3, String firstName, String lastName) 
    { 
     this.test1 = test1; 
     this.test2 = test2; 
     this.test3 = test3; 

     this.setfirstName = firstName; 
    } 


    public double computeAverage() 
    { 
     average = (test1 + test2 + test3)/3; 
     return average; 

    } 

    public String calculateGrade() 
    { 
     average = computeAverage(); 

     if (average < 60){ 
      grade = "F";} 
     else if (average < 70){ 
      grade = "D";} 
     else if (average < 80){ 
      grade = "C";} 
     else if (average < 90){ 
      grade = "B";} 
     else { 
      grade = "A"; 
     } 
     return grade; 
    } 

    public int getTest1() { 
     return test1; 
    } 

    public void setTest1(int test1) { 
     this.test1 = test1; 
    } 

    public int getTest2() { 
     return test2; 
    } 

    public void setTest2(int test2) { 
     this.test2 = test2; 
    } 

    public int getTest3() { 
     return test3; 
    } 

    public void setTest3(int test3) { 
     this.test3 = test3; 
    } 

    public double getAverage() { 
     return average; 
    } 

    public void setAverage(double average) { 
     this.average = average; 
    } 

    public String getGrade() { 
     return grade; 
    } 

    public void setGrade(String grade) { 
     this.grade = grade; 
    } 



} 
+3

Не очень ясно, какая линия 37? Потому что есть два конструктора, один без параметров и один с 5. – Christian

+0

Он использовал конструктор [перегруженный] (http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html). Вы можете вызвать 'Student()' и ввести значения вручную или вызвать 'Student (int, int, int, String, String)' и установить их внутри конструктора за один такт. Даже когда вы используете второй пример, ваш код должен иметь сеттеры/геттеры. – csmckelvey

ответ

0

Как правило, вы захотите инкапсулировать свои поля как можно больше. Это означает, что эти

int test1, test2, test3; 
double average; 
String grade, firstName, lastName; 

вещи частные. Затем вам понадобятся геттеры и сеттеры для доступа к ним извне класса. Это хорошая вещь. Однако изнутри класса вы можете использовать их без геттеров или сеттеров.

Ответит ли это на ваш вопрос? Я понятия не имею, что находится в строке 37, поскольку вы не указали нумерацию. :)

Редактировать: Если вы не знаете, конструкторы могут быть перегружены. У вас есть два разных конструктора: один с параметрами, один без. Вы можете выбрать, какой из них вы хотите использовать для построения класса, вероятно, вы хотите использовать второй.

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

public Student() { 
    this(0,0,0); 
} 

public Student(int test1, int test2, int test3, String firstName, String lastName) { 
    this.test1 = test1; 
    this.test2 = test2; 
    this.test3 = test3; 
    this.average = 0; 
    this.firstName = firstName; 
    this.lastName = lastName; 
} 
0

Ваш персональный класс неправ. Он не имеет атрибутов или методов. Нет причин распространять его, потому что он ничего не приносит партии.

Вам не нужны геттеры или сеттеры, если атрибут видим для публики, но это не значит, что это хорошая идея.

Попробуйте больше думать, как это:

public class Person { 
    protected String firstName; 
    protected String lastName; 

    public Person(String f, String l) { 
     this.firstName = f; 
     this.lastName = l; 
    } 

    public String getFirstName() { return this.firstName; } 
    public String getLastName() { return this.lastName; } 
} 

public class Student extends Person { 
    public static final int MAX_GRADES = 3; 
    private int numGrades = 0; 
    private int maxGrades; 
    private int [] grades; 

    public Student(String f, String l) { 
     this(f, l, MAX_GRADES); 
    } 

    public Student(String f, String l, int maxGrades) { 
     super(f, l); 
     this.maxGrades = (maxGrades > 0) ? maxGrades : MAX_GRADES; 
     this.grades = new int[this.maxGrades]; 
    } 

    public void addGrade(int grade) { 
     if (this.numGrades < this.maxGrades) { 
      this.grades[numGrades++] = grade; 
     } 
    } 

    public double getAverageGrade() { 
     double average = 0.0; 
     if (this.numGrades > 0) { 
      for (int i = 0; i < this.numGrades; ++i) { 
       average += grade[i]; 
      } 
      average /= this.numGrades; 
     } 
     return average; 
    } 
} 
0

Есть два Конструкторы в Student классе:

  • Конструктор без параметров
  • Конструктор с paramers (int, int, int, String , String)

Это называется перегрузкой функций/функций. Вы можете объявить много методов с с таким же именем, но подпись должна измениться. Другими словами, он должен иметь разные параметры (поэтому компилятор будет знать, какую версию метода использовать).

Так у вас есть один конструктор без параметров, которые просто набор test1, test2, test3 и average 0. А у вас есть этот конструктор:

public Student(int test1, int test2, int test3, String firstName, String lastName) 
{ 
    this.test1 = test1; 
    this.test2 = test2; 
    this.test3 = test3; 
    ... 
} 

, который принимает 4 параметры и присваивает им соответствующие поля.

Примечание, что вы должны инициализировать average в конструкторе слишком, а также установить firstName и lastName:

this.average = 0; // Or maybe 'this.average = computeAverage();' 
this.firstName = firstName; 
this.lastName = lastName; 
0

Его переменные экземпляра (переменные объявляются в начале Стьюдента) были public, что позволило его доступ к ним и их изменение напрямую без использования сеттеров и геттеров. Обычно эти переменные являются частными, и для их доступа к ним/их изменениям требуются методы.

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