【发布时间】:2014-12-02 18:42:22
【问题描述】:
我创建了一个用作生日登记的程序,您可以在其中将日期(姓名、日期)输入到 ArrayList 中,然后我可以在对话框窗口中将它们打印出来。但是,我想按日期编号对它们进行排序,然后将其打印出来。我试过这个,但我卡住了,希望能得到一些支持。
这是我到目前为止编写的代码,它不起作用。我在网上找到了该算法作为伪代码。
public String sortDate(){ //
StringBuilder sb = new StringBuilder();
boolean[]help = new boolean[reg.size()];
for(int i = 0; i<reg.size()-1;i++){
int min= Integer.MAX_VALUE;
int minIndex = -1;
for(int k = i; k<reg.size()-1; k++){
if(help[k]=false && Integer.parseInt(reg.get(k).getDate())< min){
minIndex = k;
min = reg.get(k).getDateInt();
}
}
sb.append(reg.get(minIndex).getDate()+"\n");
help[minIndex] = true;
}
return sb.toString();
}
我最终得到了错误的输出。我得到数组中第一个日期的值乘以数组的大小。可以说,如果我的数组中有 3 个日期并且第一个值是 (890105),那么输出会给我:
890105
890105
890105
我找到的伪代码是:
create something that stores the search result (ex. StringBuilder object)
create a boolean array (where all elements are false by start)
for i = 0 to size-1:
m = big value
for k = 0 to size-1:
if help[k] is false and the value on spot k < min:
index = k;
m = value on spot k;
add m at the end of the search result
help[index] = true;
感谢我能得到的任何帮助
【问题讨论】:
-
提示:
Integer.MAX_VALUE是2147483647。你正在做reg.get(min),一开始你将min初始化为Integer.MAX_VALUE。你能看到你有时在做reg.get(min)而min有这个值吗? -
什么是
reg?使用Collestion.sort(List)或Collections.sort(List, Comparator)。 -
reg (register) 是存储所有名称和日期的 ArrayList。我也想尝试自己编写算法以用于教育目的,因此不使用集合排序
-
可能问题在这里:sb.append(reg.get(min).getDate()+"\n");,应该是:sb.append(reg.get(minIndex)。 getDate()+"\n");