用Java排序用户输入

时间:2015-01-29 15:14:23

标签: java string sorting java.util.scanner

我是Java的初学者。我需要帮助来处理我的代码。提前谢谢。

问题:鉴于未列出5名被提名参加教练班的运动员名单,请为教练提供一种搜索运动员姓名并提供成绩的方法。最后按照名字的排序顺序打印运动员姓名列表。寻找最高等级的运动员。


package student;
import java.util.Scanner;
public class Atheletes {
    String name;
    static String  grade,grade1,grade2,grade3,grade4;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGrade() {
        return grade;
    }

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

    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter the name of athelete1 and grade");
        grade1 = in.nextLine();
        Scanner ino = new Scanner(System.in);
        System.out.println("Enter the name of athelete2 and grade");
        grade2 = ino.nextLine();
        Scanner ine = new Scanner(System.in);
        System.out.println("Enter the name of athelete3and grade");
        grade3 = ine.nextLine();
        Scanner inp = new Scanner(System.in);
        System.out.println("Enter the name of athelete4 and grade");
        grade4 = inp.nextLine();
    }
}

4 个答案:

答案 0 :(得分:-1)

public class Athletes {

private String name;
private String grade;

public Athletes(String name, String grade) {
    this.name = name;
    this.grade = grade;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getGrade() {
    return grade;
}

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

@Override
public String toString() {
    return "Athletes [name=" + name + ", grade=" + grade + "]";
}

public static void main(String[] args) {
    List<Athletes> lijst = new ArrayList<Athletes>();
    lijst.add(new Athletes("bbb", "Grade1"));
    lijst.add(new Athletes("ccc", "Grade2"));
    lijst.add(new Athletes("aaa", "Grade3"));
    lijst.add(new Athletes("ddd", "Grade4"));
    Collections.sort(lijst, new Comparator<Athletes>() {
        @Override
        public int compare(Athletes o1, Athletes o2) {
            return o1.getName().compareTo(o2.getName());
        }
    });

    for (Athletes athletes : lijst) {
        System.out.println(athletes);
    }
}

}

答案 1 :(得分:-1)

您可以编写自己的比较器类,根据其名称

对Athelete进行排序
public class AtheleteComparator implements Comparator
{
         @override
         public int compare(Atheletes first,Atheletes second)
       {
            return first.name.compareTo(second.name);
       }
}

然后只需使用

Collections.sort(List<Athelete>list,Your own Comparator's object)

要找出最高等级的运动员,请写另一个比较成绩的比较器

然后使用

Collections.sort(arrayList,Comparator); // Sort the arraylist
arrayList.get(arrayList.size() - 1); //gets the last item, largest for an ascending sort

答案 2 :(得分:-1)

我已根据需要简化了您的代码并添加了评论。

    // number of Athletes you want
    Athlete[] eAthlete = new Athlete[5];
    // Name of each athlete
    String[] names = { "ss", "aa", "bb", "cc", "xx" };

    // On each iteration, the name of the Athlete
    // and his/her grade is set,

    Scanner in = new Scanner(System.in);
    for (int i = 0; i < eAthlete.length; i++) {
        eAthlete[i] = new Athlete();
        eAthlete[i].setName(names[i]);
        System.out.println("Please enter Grade for: "
                + eAthlete[i].getName());
        eAthlete[i].setGrade(in.nextLine());
    }

    in.close();

    // Print all athletes with their grades,
    System.out.println("Before Sorting");
    for (Athlete s : eAthlete) {
        System.out.println(s.getName() + " " + s.getGrade());
    }

此时,每个运动员都会分配成绩和名称,

<强>输出

Before Sorting
ss 123
aa 65465
bb 4654
cc .0231
xx 23123

现在我们需要根据他们的名字对这些运动员进行排序。

我们可以设计我们自己的Comparator但是因为你不允许使用Collections.sort,我们会使用相当差的方法,即冒泡排序,

 String tempStr;
 for (int t=0; t<eAthlete.length-1; t++)
    {
        for (int i= 0; i < eAthlete.length - t -1; i++)
        {
            if(eAthlete[i+1].getName().compareTo(eAthlete[i].getName())<0)
            {
                tempStr = eAthlete[i].getName();
                eAthlete[i].setName(eAthlete[i+1].getName());
                eAthlete[i+1].setName(tempStr);
            }
        }
    }

按照成绩打印已分类的运动员,

System.out.println("After Sorting");
         for (Athelete s : eAthelete){
             System.out.println(s.getName() + " " + s.getGrade());
         }

<强>输出:

After Sorting

aa 65465
bb 4654
cc .0231
ss 123
xx 23123

观察上面输出中的名字。

这是您的Athlete课程,

class Athlete {

    private String name;
    private String grade;


    public void setName(String name) {
        this.name = name;
    }

    public void setGrade(String gr) {
        grade = gr;
    }

    public String getGrade() {
        return grade;
    }

    public String getName() {
        return name;
    }
}

以下是完整的代码,

public class Main {
    public static void main(String[] args) {

        Athlete[] eAthlete = new Athlete[5];
        String[] names = { "ss", "aa", "bb", "cc", "xx" };

        Scanner in = new Scanner(System.in);
        for (int i = 0; i < eAthlete.length; i++) {
            eAthlete[i] = new Athlete();
            eAthlete[i].setName(names[i]);
            System.out.println("Please enter Grade for: "
                    + eAthlete[i].getName());
            eAthlete[i].setGrade(in.nextLine());
        }

        in.close();

        // Print all athletes with their grades,
        System.out.println("Before Sorting");
        for (Athlete s : eAthlete) {
            System.out.println(s.getName() + " " + s.getGrade());
        }

        String tempStr;

        for (int t = 0; t < eAthlete.length - 1; t++) {
            for (int i = 0; i < eAthlete.length - t - 1; i++) {
                if (eAthlete[i + 1].getName().compareTo(eAthlete[i].getName()) < 0) {
                    tempStr = eAthlete[i].getName();
                    eAthlete[i].setName(eAthlete[i + 1].getName());
                    eAthlete[i + 1].setName(tempStr);
                }
            }
        }

        System.out.println("After Sorting");
        for (Athlete s : eAthlete) {
            System.out.println(s.getName() + " " + s.getGrade());
        }
    }
}

class Athlete {

    private String name;
    private String grade;

    public void setName(String name) {
        this.name = name;
    }

    public void setGrade(String gr) {
        grade = gr;
    }

    public String getGrade() {
        return grade;
    }

    public String getName() {
        return name;
    }

}

答案 3 :(得分:-4)

好的,既然你可以使用数组和for循环而不是集合:

public class Sorter(){

    private int[] grades = {7, 6, 4, 10, 8};
    private String[] names = {"John", "Erik", "Bob", "Frank", "Judy"};

    public static void main(String args[]) {
        new Sorter();
    }

    public Sorter(){
        int[] tempGrades = {0, 0, 0, 0, 0};
        String[] tempNames = {"", "", "", "", ""};
        for (int x = 0; x < tempGrades.length; x++) {
            if (grades[x] < tempGrades[1]) {
                tempGrades[0] = grades[x];
                tempNames[0] = names[x];
            } else if (grades[x] < tempGrades[2]) {
                tempGrades[0] = tempGrades[1];
                tempGrades[1] = grades[x];
                tempNames[0] = tempNames[1];
                tempNames[1] = names[x];
            } else if (grades[x] < tempGrades[3]) {
                tempGrades[0] = tempGrades[1];
                tempGrades[1] = tempGrades[2];
                tempGrades[2] = grades[x];
                tempNames[0] = tempNames[1];
                tempNames[1] = tempNames[2];
                tempNames[2] = names[x];
            } else if (grades[x] < tempGrades[4]) {
                tempGrades[0] = tempGrades[1];
                tempGrades[1] = tempGrades[2];
                tempGrades[2] = tempGrades[3];
                tempGrades[3] = grades[x];
                tempNames[0] = tempNames[1];
                tempNames[1] = tempNames[2];
                tempNames[2] = tempNames[3];
                tempNames[3] = names[x];
            } else {
                tempGrades[0] = tempGrades[1];
                tempGrades[1] = tempGrades[2];
                tempGrades[2] = tempGrades[3];
                tempGrades[3] = tempGrades[4];
                tempGrades[4] = grades[x];
                tempNames[0] = tempNames[1];
                tempNames[1] = tempNames[2];
                tempNames[2] = tempNames[3];
                tempNames[3] = tempNames[4];
                tempNames[4] = names[x];
            }
        }
        grades = tempGrades;
        names = tempNames;
        for (int x = 0; x < grades.length; x++) {
            System.out.println(tempNames[x] + " " + tempGrades[x]);
        }
    } 
}

仅为未来:

你可以使用ArrayList<Athlete>,其中运动员是一个接受(String name, int grade)作为建设者参数的班级,并通过实施自己的比较器按等级对运动员进行分类,或者你可以使用LinkedHashMap<Integer, String>对值进行排序按Key<Integer>

注意:具有复数的类名称(如Athletes)最适用于仅实现静态方法和变量的Singleton类。始终按功能命名类(在本例中为排序),AthleteSorter也是可行的。