有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用java实现带记录文件的排序

我之前问过这个问题,但我忘了澄清我的问题是什么,所以希望这次我能说清楚

我基本上需要帮助,使用类似于冒泡排序的算法,根据文件中的记录数对这些记录进行排序

我有一个包含5条记录的文件,其中每个文件由若干整数类型和32个字符的名称组成(每个记录大小应为36字节)。我必须把这些记录存入一个文件**这就是我需要帮助的地方:*然后根据与记录相关联的数字对记录进行排序,使用类似于气泡排序的排序算法。另一个要求是,当程序对记录进行排序时,它不应该一次读取内存中的所有记录,而是将它们移动到文件中。例如,程序读取前两条记录后,可能会切换记录(因为72>;56)并将它们写入文件中的相同位置

我们被提供了读/写类,并且可以随机访问文件

以下是提供的记录:

72詹姆斯

56马克

87约翰

30菲利普

44安德鲁

我需要根据这些名字各自的编号对它们进行排序。我的问题是,实现这种排序的最佳方式是什么

下面是编写类的代码:

package test;

//write to a file
import java.io.*; 

class FileWriteStreamTest {
    public static void main (String[] args) {
        FileWriteStreamTest f = new FileWriteStreamTest();
        f.writeMyFile();
        }
    void writeMyFile()  {
        DataOutputStream dos = null;
        String record = null;
        int recCount = 0;
        try {
            File f = new File("mydata.txt");
            if (!f.exists())
                f.createNewFile();

            FileOutputStream fos = new FileOutputStream(f);
            BufferedOutputStream bos = new BufferedOutputStream(fos); 
            dos = new DataOutputStream(bos);
            //store records into file
            dos.writeBytes(72 + "   James                      \n");
            dos.writeBytes(56 + "   Mark                       \n");
            dos.writeBytes(87 + "   John                       \n");
            dos.writeBytes(30 + "   Phillip                    \n");
            dos.writeBytes(44 + "   Andrew                     \n");
        } catch (IOException e) {
            System.out.println("Uh oh, got an IOException error!" + e.getMessage()); 
        } finally {
            // if the file opened okay, make sure we close it
            if (dos != null) {
            try { dos.close(); }
            catch (IOException ioe) { }
        }
    }
    }
}

以下是阅读课的代码:

package test;

//read from a file
import java.io.*; 

public class FileReadStreamTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FileReadStreamTest f = new FileReadStreamTest();
        f.readMyFile(); 

    }
    void readMyFile() {
        DataInputStream dis = null;
        String record = null;
        int recCount = 0; 

        try {
            File f = new File("mydata.txt");
            if (!f.exists()) {
            System.out.println(f.getName() + " does not exist");
            return;
        }
            FileInputStream fis = new FileInputStream(f);
            BufferedInputStream bis = new BufferedInputStream(fis);
            dis = new DataInputStream(bis); 

            while ( (record=dis.readLine()) != null ) {
                recCount++;
                System.out.println(recCount + ": " + record);
                } 
    }  catch (IOException e)  {
        System.out.println("Uh oh, got an IOException error!" + e.getMessage()); 
    } finally {
        // if the file opened okay, make sure we close it
        if (dis != null) {
            try { dis.close(); }
            catch (IOException ioe) { }
        }
    }
    }
}

以下是随机访问类的代码:

package test;

//read or write to any place in the file
import java.io.*; 

class FileRandomAccessTest {
    public static void main (String[] args) {
        FileRandomAccessTest f = new FileRandomAccessTest();
        f.readWriteMyFile();
        } 
    void readWriteMyFile() {
        RandomAccessFile raf = null;
        String s = null;

        try {
            File f = new File("mydata.txt");
            if (!f.exists()) // check if the file exists
                f.createNewFile(); // create a new file
            raf = new RandomAccessFile(f, "rw"); // open a file for random access with "r", "rw"
            if (raf.length() > 7) {// the size of the file
                raf.seek(7); // move the file pointer
                System.out.println(raf.readLine()); // read a line from the file pointer
                s = raf.readLine();
                System.out.println(s);
                raf.seek(raf.getFilePointer() - s.length()); // get the file pointer
                raf.writeBytes("Test RamdomAccessFile\n"); // write bytes
            }
        } catch (IOException e) {
            System.out.println("Uh oh, got an IOException error!" + e.getMessage()); 
        } finally {
            // if the file opened okay, make sure we close it
            if (raf != null) {
                try { raf.close(); } // close the file
                catch (IOException ioe) { }
            }
        }
    }
}

我当前的冒泡排序实现需要适应此问题:

package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class Sort {

    public static void bubbleSort(int[] num ) {
        int j;
        boolean flag = true;   // set flag to true to begin first pass
        int temp;   //holding variable

        while ( flag ) {
            flag= false;    //set flag to false awaiting a possible swap
            for( j=0;  j < num.length -1;  j++ ) {
                if ( num[ j ] < num[j+1] )  {
                    temp = num[ j ];                //swap elements
                    num[ j ] = num[ j+1 ];
                    num[ j+1 ] = temp;
                    flag = true;              //shows a swap occurred  
                } 
            } 
        } 
    } 

    public static void main(String[] args) throws FileNotFoundException {
        Scanner scanner = new Scanner(new File("numbers.txt"));
        int [] numbers = new int [5];
        int i = 0;
        while(scanner.hasNextInt()){
           numbers[i++] = scanner.nextInt();
        }

        bubbleSort(numbers);

        System.out.println(Arrays.toString(numbers));

    }
}

共 (0) 个答案