Tableau de l'Étudiant des objets java
Juste pour donner une course vers le bas de ce que je suis en train de faire, ici, c'est le HW mon professeur m'a donné:
- Définir une classe d'Étudiants qui s'étend de la Personne. Il ajoute les attributs
Int Test1, test2, test3
Double moyenne
Chaîne grade
Il a des méthodes computeaverage() et calculategrade(). Les notes sont basées sur la moyenne, au-dessus de 90, une à Une, de 80 à 90 B, 70 à 80 C, etc. Tous les autres attributs ont un ensemble et un get.
- Écrire une application qui utilise un tableau de type étudiant de taille 20. Le programme demande à l'utilisateur combien d'élèves sont dans la classe, puis leur permet de faire entrer les élèves et leurs résultats à un test, puis calcule de leurs classes et imprime la liste des élèves et de leurs classes.
Cela dit...
Jeudi, j'ai vu un des camarades de classe de code qu'il a obtenu de la part de l'enseignant et il y avait quelque chose que je n'ai pas vu avant dans mon élève de la classe sur la ligne 37 (Étudiant Constructeur). Au lieu d'avoir des getters et setters il avait un code similaire à ce que j'ai à la ligne 37. Mais je n'ai aucune idée de ce qu'il a fait et le code correct. Alors j'espérais que quelqu'un ici pourrait me dire ce que je fais de mal et comment ce code peut s'en sortir sans l'aide de méthodes getter et 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;
}
}
- N'est pas très clair, ce que la ligne est de 37? Parce qu'il y a deux constructeur sans paramètres et un avec 5.
- Il a utilisé un surchargé constructeur. Vous pouvez appeler
Student()
et entrer les valeurs manuellement OU à l'appelStudent(int, int, int, String, String)
et les mettre dans le constructeur d'un seul trait. Même lorsque vous utilisez le deuxième exemple, votre code doit toujours avoir setters/getters.
Vous devez vous connecter pour publier un commentaire.
Votre classe Personne est mal. Il n'a aucun des attributs ou des méthodes. Il n'y a pas de raison de le prolonger, car il n'apporte rien à la fête.
Vous n'avez pas besoin de getters ou setters si l'attribut est visible pour le public, mais cela ne veut pas dire que c'est une bonne idée.
Essayer de penser plus comme ceci:
Il y a deux constructeurs dans
Student
classe:int
,int
,int
,String
,String
)Cela s'appelle de la méthode/de surcharge de fonctions. Vous pouvez déclarer plusieurs méthode avec le même nom, mais la signature est à changer. En d'autres termes, il doit avoir des paramètres différents (ainsi, le compilateur savoir quelle est la version de la méthode à utiliser).
Si vous avez un constructeur sans paramètres, qui vient de l'ensemble
test1
,test2
,test3
etaverage
à 0. Et vous avez ce constructeur:qui reçoit
4
paramètres et les affecte aux différents champs.Note que vous devez les initialiser
average
dans le constructeur, ainsi que de définirfirstName
etlastName
:Généralement, vous aurez envie d'encapsuler votre champs autant que possible. Cela signifie faire de ces
choses privées. Vous aurez alors besoin des getters et setters pour y accéder de l'extérieur de la classe. C'est une bonne chose. Cependant, à partir de l'intérieur de la classe, vous pouvez les utiliser sans getters ou setters pas de problème.
Est-ce répondre à votre question? Je n'ai aucune idée de ce qui est sur la ligne 37, que vous ne fournissez pas de numérotation. 🙂
Edit: Au cas où vous ne savez pas, les constructeurs peuvent être surchargés. Vous avez deux constructeurs, l'un avec des paramètres, l'autre sans. Vous pouvez choisir celle que vous voulez utiliser pour construire la classe, vous voulez probablement à l'aide de la seconde.
Si vous avez besoin pour les deux constructeurs, l'un complète l'un et l'autre, qui utilise des valeurs par défaut, vous pouvez contempler faisant référence à la deuxième constructeur à partir de l'intérieur de la première, afin d'éviter la duplication de code. Comme:
Ses variables d'instance (les variables déclarées au début de l'Étudiant), ont été
public
, ce qui lui a permis d'accéder et de modifier directement sans l'utilisation de setters et getters. Normalement, ces variables sont privés, nécessitant des méthodes d'accès/modifier.