我正在尝试为文本文件使用多种排序方法。我可以让filereader
工作,但它不会对arrays
进行排序。当我在没有filereader
的情况下手动完成它时,它确实有效。
这里我使用简单的冒泡排序,因为它已经手动工作但现在不行。
这是我的代码:
public class BubbleSort {
public static void main(String[] args) throws Exception {
File f=new File("filename.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
ArrayList alist = new ArrayList();
String s = br.readLine();
while (s != null)
{
alist.add(Integer.parseInt(s));
s = br.readLine();
}
int[] iArray = new int[alist.size()];
for (int i = 0; i < alist.size(); i++)
iArray[i] = (int) alist.get(i);
System.out.println(alist + " ");
bubbleSort(iArray);
printarray(iArray);
fr.close();
}//end loop
public static void bubbleSort(int[] alist) {
int outer, inner;
for (outer = alist.length - 1; outer > 0; outer--) { // counting down
for (inner = 0; inner < outer; inner++) { // bubbling up
if (alist[inner] > alist[inner + 1]) { // if out of order...
int temp = alist[inner]; // ...then swap
alist[inner] = alist[inner + 1];
alist[inner + 1] = temp;
}
}
}
}
public static void printarray (int []alist){
for (int i = 0; i < alist.length;i++){
System.out.println("" + alist);
}
}
}
答案 0 :(得分:1)
好的,首先,您应该将通用声明添加到您的arraylist中,这样您就可以让java决定如何取消打包该值。
ArrayList alist = new ArrayList();
应该是
ArrayList<Integer> alist = new ArrayList<Integer>();
-
iArray[i] = (int) alist.get(i);
将是
iArray[i] = alist.get(i);
无论如何你的代码都有效,但你应该更简单地输出这些数组(不要让javas冗长得到你的逻辑!)
System.out.println(alist.toString());
bubbleSort(iArray);
System.out.println(Arrays.toString(iArray));
我的程序输出:
[144, 3, 1, 5, 4, 9, 9, 13]
[1, 3, 4, 5, 9, 9, 13, 144]
答案 1 :(得分:1)
我假设您的代码正在编译,您只是省略了导入。
您的代码似乎有效,问题是在打印生成的数组时,您每次都在循环中打印整个数组:
public static void printarray (int []alist){
for (int i = 0; i < alist.length;i++){
System.out.println("" + alist); //Printing entire array
}
}
应该打印每个值:
public static void printarray (int []alist){
for (int i = 0; i < alist.length;i++){
System.out.println("" + alist[i]); //Index added
}
}
除此之外,我有几点建议:
问候。