使用FileReader的单个Java应用程序中的排序算法

使用FileReader的单个Java应用程序中的排序算法,java,arrays,sorting,filereader,Java,Arrays,Sorting,Filereader,我正在尝试对文本文件使用几种排序方法。我可以让文件阅读器工作,但是它不会对数组进行排序。当我不使用filereader手动操作时,它确实工作了。 在这里,我使用简单的冒泡排序,因为它已经手动工作,但现在不会 这是我的代码: public class BubbleSort { public static void main(String[] args) throws Exception { File f=new File("filename.txt"); FileReader

我正在尝试对文本文件使用几种排序方法。我可以让
文件阅读器
工作,但是它不会对
数组
进行排序。当我不使用
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);
        }
    }
}
公共类BubbleSort{
公共静态void main(字符串[]args)引发异常{
文件f=新文件(“filename.txt”);
FileReader fr=新的FileReader(f);
BufferedReader br=新的BufferedReader(fr);
ArrayList alist=新的ArrayList();
字符串s=br.readLine();
while(s!=null)
{
alist.add(Integer.parseInt);
s=br.readLine();
}
int[]iArray=newint[alist.size()];
对于(int i=0;i0;outer--){//倒计时
对于(内部=0;内部<外部;内部++){//冒泡
如果(alist[inner]>alist[inner+1]){//如果出现故障。。。
int temp=alist[inner];/…然后交换
alist[内部]=alist[内部+1];
alist[内部+1]=温度;
}
}
}
}
公共静态void打印数组(int[]alist){
for(int i=0;i
好的,首先,您应该将泛型声明添加到arraylist中,以便让java决定如何取消装箱

ArrayList alist = new ArrayList();
应该是

ArrayList<Integer> alist = new ArrayList<Integer>();
将是

iArray[i] = alist.get(i);
无论如何,您的代码是可以工作的,但是输出这些数组应该更简单(不要让Java的冗长影响到您的逻辑!)

您的程序为我输出:

[144, 3, 1, 5, 4, 9, 9, 13]
[1, 3, 4, 5, 9, 9, 13, 144]

我假设您的代码正在编译,而您只是省略了导入

您的代码似乎正常工作,问题是在打印生成的数组时,您每次都在循环中打印整个数组:

public static void printarray (int []alist){
 for (int i = 0; i < alist.length;i++){
     System.out.println("" + alist); //Printing entire array
 }
}
publicstaticvoidprintary(int[]alist){
for(int i=0;i
应打印每个值:

public static void printarray (int []alist){
 for (int i = 0; i < alist.length;i++){
     System.out.println("" + alist[i]); //Index added
 }
}
publicstaticvoidprintary(int[]alist){
for(int i=0;i
除此之外,我还有几点建议:

  • 避免从主方法引发异常,而是执行try/catch块来处理错误
  • 代码在创建ArrayList和Primitive数组时使用了内存中的doble空间,为了更好地实现这一点,只需使用一个结构
  • 还考虑使用泛型作为类型安全集合。

  • 问候。

    向我们展示您的分拣程序
    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
     }
    }