Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在数组中搜索元素?以及如何将声明了方法的变量添加到数组列表中?_Java_Arrays_Search_Inheritance_Arraylist - Fatal编程技术网

Java 如何在数组中搜索元素?以及如何将声明了方法的变量添加到数组列表中?

Java 如何在数组中搜索元素?以及如何将声明了方法的变量添加到数组列表中?,java,arrays,search,inheritance,arraylist,Java,Arrays,Search,Inheritance,Arraylist,我知道这个程序有两个主要问题。首先,我不知道如何将FinalGrade和LetterGrade放入数组。其次,我不知道如何使用姓和名在数组中搜索学生。如果您发现我的程序有其他问题,请告诉我。谢谢 这是头等舱 package student; public class Person { protected String FirstName, LastName; //Constructor public Person(String FirstName, String L

我知道这个程序有两个主要问题。首先,我不知道如何将FinalGrade和LetterGrade放入数组。其次,我不知道如何使用姓和名在数组中搜索学生。如果您发现我的程序有其他问题,请告诉我。谢谢

这是头等舱

package student;

public class Person {

    protected String FirstName, LastName;

    //Constructor
    public Person(String FirstName, String LastName) {
        this.FirstName = FirstName;
        this.LastName = LastName;
    }

    //Getters
 public String getFirstName() {
        return FirstName;
    }

    public String getLastName() {
        return LastName;
    }
    //Setters
    public void setFirstName(String FirstName) {
        this.FirstName = FirstName;
    }

     public void setLastName(String LastName) {
        this.LastName = LastName;
    }


}
这是二等舱:

package student;

import java.util.ArrayList;
import java.util.Scanner;



public class Student extends Person{
    private int HomeworkAve, QuizAve, ProjectAve, TestAve; 
    private double FinalGrade;
    private String LetterGrade;

//Constructor for the averages
    public Student(int HomeworkAve, int QuizAve, int ProjectAve, int TestAve, String FirstName, String LastName) 
    {
        super(FirstName, LastName);
        this.HomeworkAve = HomeworkAve;
        this.QuizAve = QuizAve;
        this.ProjectAve = ProjectAve;
        this.TestAve = TestAve;

    }

    //Method to calculate final grade and letter grade
    //Final grade calculation
    public double CalcGrade (int HomeworkAve, int QuizAve, int ProjectAve, int TestAve)
    {
FinalGrade = (double)(0.15*HomeworkAve + 0.05*QuizAve + 0.4 * ProjectAve + 0.4*TestAve);
return FinalGrade;
    }

    //Letter grade calculation
    public String CalcGrade ( double FinalGrade)
    {
        if ( FinalGrade >= 90.00)
        LetterGrade="A";
    else if(FinalGrade >= 80.00)
        LetterGrade="B";
    else if(FinalGrade>=70.00)
        LetterGrade="C";
    else if(FinalGrade>=60.00)
        LetterGrade="D";
    else LetterGrade="F";

        return LetterGrade;
    }

    public String getFullName (String FirstName,String LastName)
    {
        String str1 = FirstName;
        String str2 = LastName;
        String FullName = str1+","+str2;
        return FullName;
    }

    public Student(int HomeworkAve, int QuizAve, int ProjectAve, int TestAve, double FinalGrade, String LetterGrade, String FirstName, String LastName) {
        super(FirstName, LastName);
        this.HomeworkAve = HomeworkAve;
        this.QuizAve = QuizAve;
        this.ProjectAve = ProjectAve;
        this.TestAve = TestAve;
        this.FinalGrade = FinalGrade;
        this.LetterGrade = LetterGrade;

    }


    //Setters for this student class
    public void setHomeworkAve(int HomeworkAve) {
        this.HomeworkAve = HomeworkAve;
    }

    public void setQuizAve(int QuizAve) {
        this.QuizAve = QuizAve;
    }

    public void setProjectAve(int ProjectAve) {
        this.ProjectAve = ProjectAve;
    }

    public void setTestAve(int TestAve) {
        this.TestAve = TestAve;
    }

    public void setFinalGrade(int FinalGrade) {
        this.FinalGrade = FinalGrade;
    }

    public void setLetterGrade(String LetterGrade) {
        this.LetterGrade = LetterGrade;
    }


    //Getters for this student class
    public int getHomeworkAve() {
        return HomeworkAve;
    }

    public int getQuizAve() {
        return QuizAve;
    }

    public int getProjectAve() {
        return ProjectAve;
    }

    public int getTestAve() {
        return TestAve;
    }

    public double getFinalGrade() {
        return FinalGrade;
    }

    public String getLetterGrade() {
        return LetterGrade;
    }

   public void DisplayGrade (){
       System.out.println(FirstName+" "+LastName+"/nFinal Grade: "+FinalGrade+"/nLetter Grade: "+ LetterGrade);
   }




   public static void main(String[] args){
    Scanner oScan = new Scanner(System.in);
    Scanner iScan = new Scanner(System.in);

    boolean bContinue = true;
    int iChoice;

   ArrayList<Student> students = new ArrayList<>();


   while (bContinue == true)
        {
   //The menu
       System.out.println("1.       New Class List");
       System.out.println("2.       Search for a Student");
       System.out.println("3.       Exit");
       System.out.println("Choose an item");

       iChoice = iScan.nextInt();


   //The 1st case: when the user wants to enter the new list   
   if (iChoice == 1){

   System.out.println("Enter the number of students");

   int numberOfStudents = iScan.nextInt();

    for(int iCount = 0;iCount < numberOfStudents;){

    System.out.println("Enter the name for Student " + ++iCount);
    System.out.println("Enter First Name");
    String FirstName = oScan.nextLine();
    System.out.println();

    System.out.println("Enter Last Name");
    String LastName = oScan.nextLine();
     System.out.println();

    System.out.println("Enter Homework Average");
    int HomeworkAve = iScan.nextInt();
    System.out.println();

    System.out.println("Enter Quiz Average");
    int QuizAve = iScan.nextInt();
    System.out.println();

    System.out.println("Enter Project Average");
    int ProjectAve = iScan.nextInt();
    System.out.println();

    System.out.println("Enter Test Average");
    int TestAve = iScan.nextInt();
    System.out.println();
这是我用来查找学生的修订代码,但我不知道在找到数组后如何打印它

int i = 0;
for (Student student : students) {

    if (FirstName != null & LastName != null);{
    if (student.getFirstName().equals(FirstName) && student.getLastName().equals(LastName)) {

   System.out.println(students.get(i)); //this doesn't work

        break;
    }
    i++;

}
}   

 //The 3r case: when the user wants to exit       
 else if (iChoice == 3)
            {
                bContinue = false;
            }
}
}

}

您有一个Student类型的ArrayList,并且正在对String类型的变量执行indexOf。您必须遍历整个ArrayList,然后进行比较,以确定学生姓名是否匹配。示例代码:

int i = 0;
for (Student student : students) {
    // Add null checks if first/last name can be null
    if (student.getFirstName().equals(firstName) && student.getLastName().equals(lastName)) {
        System.out.println("Found student at " + i);
        break;
    }
    i++;
}

FinalGrade和LetterGrade是每个对象中的变量,我认为您对数组/数组列表的概念是错误的。ArrayList仅保存每个学生对象,而不是每个对象中的变量。您可以通过get*函数遍历每个学生并获得他们的最终成绩和letterGrade。在执行此操作之前,您应该调用CalcGrade方法,以便计算成绩。

如果需要通过公用键(如lastName、firstName)查找学生,最好使用地图。如果你把学生放在一个地图上,地图上的键是lastName+“,”+firstName,那么你就可以更容易地找到你的学生。没错,但是如果你需要通过比较对象的变量来找到元素,这是一个更通用的解决方案。
int i = 0;
for (Student student : students) {
    // Add null checks if first/last name can be null
    if (student.getFirstName().equals(firstName) && student.getLastName().equals(lastName)) {
        System.out.println("Found student at " + i);
        break;
    }
    i++;
}