【问题标题】:Sorting Algorithms in a single Java Application using FileReader使用 FileReader 在单个 Java 应用程序中排序算法
【发布时间】:2013-11-14 17:58:56
【问题描述】:

我正在尝试对文本文件使用多种排序方法。我可以让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);
        }
    }
}

【问题讨论】:

  • 向我们展示您的排序程序

标签: java arrays sorting filereader


【解决方案1】:

好的,首先,您应该将泛型声明添加到您的数组列表中,这样您就可以让 java 决定如何拆箱该值。

ArrayList alist = new ArrayList();

应该是

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

-

iArray[i] = (int) alist.get(i);

将是

iArray[i] = alist.get(i);

无论如何你的代码都可以工作,但你应该更简单地输出这些数组(不要让 java 的冗长进入你的逻辑!)

    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]

【讨论】:

    【解决方案2】:

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

    您的代码似乎可以工作,问题是在打印结果数组时,您每次都在循环打印整个数组:

    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
     }
    }
    

    除此之外我还有几点建议:

    1. 避免从 main 方法中引发异常,而是执行 try/catch 块来处理错误。
    2. 代码在您创建 ArrayList 和原始数组时使用内存中的双空间,以使其更好地使用一个结构。
    3. 另外,请考虑将泛型用于类型安全的集合。

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 2019-10-23
      • 2017-03-19
      • 2011-05-14
      • 1970-01-01
      • 2013-01-07
      相关资源
      最近更新 更多