我一直坚持这个问题很长时间,我不知道该怎么做。 基本上我有一个文本文件,其中包含人名,然后是学号,然后奖金如下:
Green%3243%1000
Kevin%7657%400
Frank%345%10000
Bob%5435%5000
Stefan%31231%1000
Javis%4532%100
IronMan%5435%2000
Lamp%534%3000
我想要做的是根据最后一个数字对数组进行排序。
我试过这种可憎的事情(不要把它读成垃圾):
boolean flag = true;
String temp;
int temp1;
int temp2;
while (flag){
flag = false;
for(int j=0; j < list.size() -1; j++ ){
System.out.println(list.get(j));
Scanner s = new Scanner(list.get(j)).useDelimiter("%");
s.next();
s.next();
temp1 = s.nextInt();
Scanner s2 = new Scanner(list.get(j+1)).useDelimiter("%");
s2.next();
s2.next();
temp2 = s2.nextInt();
if (temp1 < temp2){
temp = list.get(j);
list.add(j, list.get(j+1));
list.add(j+1,temp);
flag = true;
}
}
}
但它只是无限循环。我虽然在制作它时只是将数组列表修补为冒泡排序。
如果有任何想法并愿意分享,我们将不胜感激。
答案 0 :(得分:1)
这是让你开始的东西。
希望这有助于您获得工作流程。
答案 1 :(得分:1)
Java是一种面向对象的语言,所以我只使用对象:
创建一个Student
对象,其中包含您要存储的三个值(以及一个toString()
方法,用&#34;%&#34;
public class Student {
private final String name;
private final int number;
private final int prizeMoney;
public Student(final String name, final int number, final int prizeMoney) {
this.name = name;
this.number = number;
this.prizeMoney = prizeMoney;
}
@Override
public String toString() {
return name+"%"+number+"%"+prizeMoney;
}
public int getPrizeMoney() {
return prizeMoney;
}
}
将您的行读作Student
个对象,并将其存储在List
:
final Scanner scan = new Scanner(new File("/path/to/StudentsList"));
final List<Student> students = new ArrayList<Student>();
while (scan.hasNextLine()) {
final Scanner line = new Scanner(scan.nextLine());
line.useDelimiter("%");
students.add(new Student(line.next(), line.nextInt(), line.nextInt()));
line.close();
}
scan.close();
使用自定义List
订购Comparator
,然后将其打印出来:
students.sort(new Comparator<Student>() {
@Override
public int compare(final Student s1, final Student s2) {
return s1.getPrizeMoney()-s2.getPrizeMoney();
}
});
for (final Student student: students)
System.out.println(student);
<强>输出强>:
Javis%4532%100
Kevin%7657%400
Green%3243%1000
Stefan%31231%1000
IronMan%5435%2000
Lamp%534%3000
Bob%5435%5000
Frank%345%10000
答案 2 :(得分:0)
我认为在这里创建一个3d数组这个数组中从右到左的8x8x8是row,col和in,因此[0] [0] [1]是块1或kevin [0] [1] [1]是7657 [1] [1] [1]是400.我喜欢这种方式,因为它不仅为每个“项目”提供了一个数组,它还允许您保持组织和易于访问