所以我已经尝试了几乎所有东西,但只是无法对此进行排序,我必须使用这种排序算法..
所以这是我到目前为止的代码,但是当我运行该程序时,它会按正常顺序而不是降序打印出数组。
BufferedReader filein = new BufferedReader(new FileReader("Employees.txt"));
int count = Integer.parseInt(filein.readLine());
String[] names = new String[count];
int[] years = new int[count];
int i;
int pass;
int loc;
int temp;
String tempNames;
String passNames;
System.out.println("My Company Employee Search");
System.out.println("--------------------------");
System.out.println("");
for(i=0; i < count-1; i++) {
names[i] = filein.readLine();
years[i] = Integer.parseInt(filein.readLine());
}//populate the arrays from filein
for(pass = 0; pass<count-1;pass++){
loc = pass;
for(i=pass+1; i<count; i++) {
if(years[i]<years[loc]) {
loc = i;
}//end if
}//end of inner loop
temp = years[loc];
years[loc] = years[pass];
years[pass] = temp;
names[loc]=names[pass];
System.out.println(years[loc]+" "+names[loc]);
}//end of containg loop
我加载的文本文件是:
6
Luke
2013
Bob
1980
Ben
2000
Cam
2000
Holly
2001
Joe
1997
答案 0 :(得分:1)
创建普通旧Java对象(POJO)并将文件内容存储在该POJO的实例中。只要您制作了POJO工具Comparable
,就可以使用Arrays.sort(Object[])
来订购它们的长度。
修改强>
然后你需要改变你的第二次交换。
names[loc]=names[pass];
盲目地替换names[loc]
而不保存以前的值。
String tempName = names[loc];
names[loc] = names[pass];
names[pass] = tempName;
答案 1 :(得分:0)
试试此代码
public static void main(String[] args) throws IOException {
// TODO code application logic here
BufferedReader filein = new BufferedReader(new FileReader("C:\\Employees.txt"));
int count = Integer.parseInt(filein.readLine());
String[] names = new String[count];
int[] years = new int[count];
int i;
int pass;
int loc;
int temp;
String tempNames;
String passNames;
System.out.println("My Company Employee Search");
System.out.println("--------------------------");
System.out.println("");
for (i = 0; i < count ; i++) {
names[i] = filein.readLine();
years[i] = Integer.parseInt(filein.readLine());
//System.out.println("")
}//populate the arrays from filein
for(int j=0;j<years.length;j++)
{
for(int k=0;k<j;k++)
{
if(years[j]>years[k])
{
temp=years[j];
years[j]=years[k];
years[k]=temp;
tempNames=names[j];
names[j]=names[k];
names[k]=tempNames;
}
}
}
for(int j=0;j<years.length;j++)
{
System.out.println(" Name = "+names[j]+" And Year = "+years[j]);
}
}
答案 2 :(得分:0)
这是因为您在更改其值后打印name[loc] and year[loc]
。
第一件事正如我在评论中建议的那样正确交换名称[]的内容
第二次打印name[pass] and year[pass]
,因为它们包含较小的值,而不是loc