Java arrayList比较

时间:2015-05-01 15:31:13

标签: java sorting arraylist

有人能告诉我如何根据ArrayList的每个组件所具有的整数值在arrayList中列出一些数据吗?这是我的主要课程

import java.util.Scanner;
import java.io.*;
import java.util.Collections;
import java.util.ArrayList;
public class StudentDriver {

public static void main(String[] args) throws IOException {

    Scanner scan, urlScan, fileScan;
    String url, file;
    int count = 0;
    scan = new Scanner(System.in);
    System.out.println("Enter the name of the file");
    fileScan = new Scanner(new File("Data.csv"));
    ArrayList<Student> studentList = new ArrayList<Student>();
        while(fileScan.hasNext()){
            url = fileScan.nextLine();
            urlScan = new Scanner(url);
            urlScan.useDelimiter(",");
            count++;
            while(urlScan.hasNext()){
                String name = urlScan.next();
                String last = urlScan.next();
                int score = urlScan.nextInt();
                Student e = new Student(name,last, score);
                studentList.add(e);

            }   
        }
        System.out.println("The file has data for" +count+ "instances");
        int option;
        do{

        System.out.println("********");
        System.out.println("Options:");
        System.out.println("********\n1. List \n2. Add Student \n3.Delete Student \n4. Exit \n******** ");
        System.out.print("Select option: ");
        option = scan.nextInt();

        if(option == 1){    
        int index = 0;
        while(index<studentList.size()){
            System.out.println(studentList.get(index));
            index++;
        }
        }
        else if(option == 2){
            System.out.print("Enter the name of the student: ");
            String newName = scan.next();
            System.out.print("Enter the last name of the student: ");
            String newLastName = scan.next();
            System.out.print("Enter the exam score of the student: ");
            int newScore = scan.nextInt();
            Student b = new Student(newName, newLastName, newScore);
            studentList.add(b);}
        else if(option == 3){
            System.out.print("Enter the name of the student to remove: ");
            String remove = scan.next();
            System.out.print("Enter the last name of the student: ");
            String remove1 = scan.next();
            int location = studentList.indexOf(remove);
            location = studentList.indexOf(remove1);

            studentList.remove(location);
            }   

        }while(option!=4 && option <4);
    }//main
}//class

这是另一个班级

public class Student implements Comparable<Student>{
    String firstName, lastName;
    int score;

public Student(String firstName, String lastName, int score){
    this.firstName = firstName;
    this.lastName = lastName;
    this.score = score;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

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

public int getScore() {
    return score;
}

public void setScore(int score) {
    this.score = score;
}
public String toString(){
    return firstName + " " + lastName + ", exam score is "+ score;
}

@Override
public int compareTo(Student c) {

    return score-c.getScore();
}

}

正如您所看到的,到目前为止,我已经创建了比较方法所在的类,但是我在使用它时遇到了困难。另外,我只需要写下学生的姓名和姓氏,就很难删除其中一个Array List部分。如果有人帮助我,我会非常感激。

3 个答案:

答案 0 :(得分:0)

从列表中删除学生。 studentList是包含Student个对象的列表。 这意味着以下代码:

System.out.print("Enter the name of the student to remove: ");
String remove = scan.next();
System.out.print("Enter the last name of the student: ");
String remove1 = scan.next();
int location = studentList.indexOf(remove);

尝试找到名为Student的索引。当您搜索-1而不是String对象时,这将返回Student。 相反,您必须遍历studentList,并将每个Student元素的名字和姓氏与removeremove1的值进行比较。

for(Student student : studentList) {
    if(student.getFirstName.equals(remove) && student.getLastName.equals(remove1)) {
        // remove the student.
    }
}

另外,您可以考虑将每个Student ID作为唯一标识符。

答案 1 :(得分:0)

尝试这样排序studentList

  Collections.sort(studentList, new Comparator<Student>() 
    {
        @Override
        public int compare(Student  x, Student  y)
        {
            if(x.score >= y.score)
                return 1;
            else 
                return -1;

        }
    });

答案 2 :(得分:0)

你可以将compareTo方法更改为

public int compareTo(Student another)
{
    if (this.score > another.score)
        return -1;
    if (this.score < another.score) 
        return 1;
    else
        return 0;
}

这应该显示为降序,您可以更改运算符

而不是使用你要对它进行排序

Collections.sort(studentList)

此外,如果您不想使用Collections.sort()方法,我可以向您展示如何在添加选项

下使用for循环编写它
Student newStd = new Student(name, last, score);


                for(int i=0;studentList.size()>i;i++)
                {
                    int size = studentList.size();
                    if(newStd.compareToCustom(studentList.get(i))>0)
                    {
                        studentList.add(i, newStd);
                        break;
                    }
                    else if(newStd.compareToCustom(studentList.get(size-1))<0)
                    {
                        studentList.add(studentList.size(), newStd);
                        break;
                    }
                    else if(newStd.compareToCustom(studentList.get(i))==0)
                    {
                        studentList.add(i++, newStd);
                        break;
                    }
                }

可以使用删除部分

else if ( option == 3)
            {
                System.out.print("Enter the first name of student will be deleted: ");
                String removeName = scan.next();
                System.out.print("Enter the last name of student will be deleted: ");
                String removeLastName = scan.next();

                for ( int i = 0; i < studentList.size(); i++)
                {
                    Student deleted = studentList.get(i);

                    if ( deleted.getFirstName().toLowerCase().equals(removeName.toLowerCase()) && deleted.getLastName().toLowerCase().equals(removeLastName.toLowerCase()))
                    {
                        studentList.remove(i);
                        System.out.println("The student has been deleted.");
                        break;
                    }
                    else
                    {
                        System.out.println("This student is not found");
                        break;
                    }

                }

            }