Java 有一个程序,我想融合到一个合并排序,但有困难这样做

Java 有一个程序,我想融合到一个合并排序,但有困难这样做,java,arrays,reference,comparator,mergesort,Java,Arrays,Reference,Comparator,Mergesort,我有三个类的程序,它们获取了大量数据,并使用比较器对其进行排序。我所做的是在名为EarthquakeDataSet的类的末尾添加了一个合并排序。合并被添加到一个整数数组中。我想做的是处理来自EarthquakeRecord的一系列参考资料。然后我也需要比较来处理它。合并从私有int[]数据的类EarthquakeDataSet的末尾开始。如有任何建议,将不胜感激 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.io.IOExcep

我有三个类的程序,它们获取了大量数据,并使用比较器对其进行排序。我所做的是在名为EarthquakeDataSet的类的末尾添加了一个合并排序。合并被添加到一个整数数组中。我想做的是处理来自EarthquakeRecord的一系列参考资料。然后我也需要比较来处理它。合并从私有int[]数据的类EarthquakeDataSet的末尾开始。如有任何建议,将不胜感激


导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入javax.swing.JFileChooser;
导入javax.swing.JOptionPane;
公共级地震测试{
公共静态void main(字符串[]args){
地震数据集eqds=新地震数据集();
字符串sFileName=null;
试一试{
文件;
JFileChooser fc=新的JFileChooser(“.”);
fc.setFileSelectionMode(JFileChooser.FILES_和_目录);
int returnVal=fc.showOpenDialog(null);
if(returnVal==JFileChooser.APPROVE_选项){
file=fc.getSelectedFile();
long lElapseTime=eqds.loadDataFromFile(file);//打开文件并将所有数据解析为EarthquakeRecord对象
System.out.println(“文件加载/解析:运行时间:”+((float)lElapseTime)/1000.0);
lElapseTime=eqds.copyOriginalArray();
System.out.println(“创建3个数组副本:经过时间:”+((float)lElapseTime)/1000.0);
eqds.sortNativeJava();//一个类似于谷歌构建互联网行星索引的批处理过程
System.out.println(“使用本机Java排序后的数据”);
while(JOptionPane.showConfirmDialog(null,“显示排序视图?”)==0)
eqds.display();//允许用户多次查看数据并查看排序结果:类似于Google用户执行查找
}
}捕获(FileNotFoundException fnfe){
showMessageDialog(null,“未找到文件:”+sFileName);
}捕获(ioe异常ioe){
showMessageDialog(null,“IO异常:+sFileName”);
}捕获(例外e){
showMessageDialog(null,“错误:一般异常”);
e、 printStackTrace();
}
}
}

import java.util.Comparator;
公共级地震记录{
私人内务部;
尼蒙特私人酒店;
私人国际日;
私人住宅;
私人国际分钟;
私人双数据秒;
私人int nUTC;
私人双重身份;
私人双重身份;
私人双重重要性;
私有内部nDepth;
尼泊尔中央私人酒店;
私人双重身份;
私人双重身份;
私有字符串sCityName;
公共地震记录(字符串sRawRecord){parseStringInput(sRawRecord);}
私有void parseStringInput(字符串sRawRecord){
试一试{
nYear=Integer.parseInt(sRawRecord.substring(0,4));
}catch(java.lang.numberformatexe){
nYear=0;
}
试一试{
nMonth=Integer.parseInt((sRawRecord.substring(5,7)).trim());
}catch(java.lang.numberformatexe){
nMonth=0;
}
试一试{
nDay=Integer.parseInt((sRawRecord.substring(8,10)).trim());
}catch(java.lang.numberformatexe){
nDay=0;
}
试一试{
nHour=Integer.parseInt((sRawRecord.substring(11,13)).trim());
}catch(java.lang.numberformatexe){
nHour=0;
}
试一试{
nMinute=Integer.parseInt((sRawRecord.substring(14,16)).trim());
}catch(java.lang.numberformatexe){
n分钟=0;
}
试一试{
dssecond=Double.parseDouble((sRawRecord.substring(17,21)).trim());
}catch(java.lang.numberformatexe){
d秒=0.0;
}
试一试{
nUTC=Integer.parseInt((sRawRecord.substring(23,25)).trim());
}catch(java.lang.numberformatexe){
nUTC=0;
}
试一试{
dLatitude=Double.parseDouble((sRawRecord.substring(30,37)).trim());
}catch(java.lang.numberformatexe){
dLatitude=0.0;
}
试一试{
dlongalite=Double.parseDouble((sRawRecord.substring(38,46)).trim());
}catch(java.lang.numberformatexe){
d长度=0.0;
}
试一试{
dMagnitude=Double.parseDouble((sRawRecord.substring(46,49)).trim());
}catch(java.lang.numberformatexe){
dMagnitude=0.0;
}
试一试{
nDepth=Integer.parseInt((sRawRecord.substring(50,54)).trim());
}catch(java.lang.numberformatexe){
nDepth=0;
}
试一试{
nEpicentre=Integer.parseInt((sRawRecord.substring(56,61)).trim());
}catch(java.lang.numberformatexe){
尼泊尔中心=0;
}
试一试{
dcitylatentity=Double.parseDouble((sRawRecord.substring(62,71)).trim());
}catch(java.lang.numberformatexe){
DCITYLATIZE=0.0;
}
试一试{
dCityLongitude=Double.parseDouble((sRawRecord.substring(72,81)).trim());
}catch(java.lang.numberformatexe){
dcitylonguide=0.0;
}
sCityName=sRawRecord.substring(93124.trim();
}
public int getYear(){return nYear;}
public int getMonth(){return nMonth;}
public int getDay(){return nDay;}
public int getHour(){return nHour;}
public int getMinute(){return nMinute;}
public double getSecond(){return dssecond;}
public int getUTC(){return nUTC;}
公共双getLatitude(){return dLatitude;}
public double getLongitude(){return dlongity;}
public double getMagnitude(){return dmMagnitude;}
public int getDepth(){return nDepth;}
public int getEpicentre(){return nEpicentre;}
public double getCityLatitude(){return dCityLatitude;}
public double getCityLongitude(){return dCityLongitude;}
公共字符串getCityName()
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;


public class EarthquakeTest {
public static void main(String[] args) {
    EarthquakeDataSet eqds = new EarthquakeDataSet(); 
    String sFileName = null;
    try {
        File file;
        JFileChooser fc = new JFileChooser(".");
        fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        int returnVal = fc.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = fc.getSelectedFile();

            long lElapseTime = eqds.loadDataFromFile(file);// open file and parse all data into <i>EarthquakeRecord</i> objects
            System.out.println("File Loading / Parsing: Elapsed time: " + ((float) lElapseTime) / 1000.0);

            lElapseTime = eqds.copyOriginalArray();
            System.out.println("Create 3 copies of arrays: Elapse Time: " + ((float) lElapseTime) / 1000.0);

            eqds.sortNativeJava(); // a batch process akin to the Google batch process of building a planetary index of the internet

            System.out.println("Data After Sorting with Native Java Sort");
            while (JOptionPane.showConfirmDialog(null, "Display Sorted View?") == 0)
                eqds.display(); // allow user to view the data multiple times and view the outcome of the sort: akin to Google users performing lookups
        }
    } catch (FileNotFoundException fnfe) {
        JOptionPane.showMessageDialog(null, "File not found: " + sFileName);
    } catch (IOException ioe) {
        JOptionPane.showMessageDialog(null, "IO Exception: " + sFileName);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "ERROR: General Exception");
        e.printStackTrace();
    }
}
}
import java.util.Comparator;



public class EarthquakeRecord {
private int nYear;
private int nMonth;
private int nDay;
private int nHour;
private int nMinute;
private double dSecond;
private int nUTC;
private double dLatitude;
private double dLongitude;
private double dMagnitude;
private int nDepth;
private int nEpicentre;
private double dCityLatitude;
private double dCityLongitude;
private String sCityName;

public EarthquakeRecord(String sRawRecord) { parseStringInput(sRawRecord); }


private void parseStringInput(String sRawRecord) {
    try {
        nYear = Integer.parseInt(sRawRecord.substring(0, 4));
    } catch (java.lang.NumberFormatException e) {
        nYear = 0;
    }
    try {
        nMonth = Integer.parseInt((sRawRecord.substring(5, 7)).trim());
    } catch (java.lang.NumberFormatException e) {
        nMonth = 0;
    }
    try {
        nDay = Integer.parseInt((sRawRecord.substring(8, 10)).trim());
    } catch (java.lang.NumberFormatException e) {
        nDay = 0;
    }
    try {
        nHour = Integer.parseInt((sRawRecord.substring(11, 13)).trim());
    } catch (java.lang.NumberFormatException e) {
        nHour = 0;
    }
    try {
        nMinute = Integer.parseInt((sRawRecord.substring(14, 16)).trim());
    } catch (java.lang.NumberFormatException e) {
        nMinute = 0;
    }
    try {
        dSecond = Double.parseDouble((sRawRecord.substring(17, 21)).trim());
    } catch (java.lang.NumberFormatException e) {
        dSecond = 0.0;
    }
    try {
        nUTC = Integer.parseInt((sRawRecord.substring(23, 25)).trim());
    } catch (java.lang.NumberFormatException e) {
        nUTC = 0;
    }
    try {
        dLatitude = Double.parseDouble((sRawRecord.substring(30, 37)).trim());
    } catch (java.lang.NumberFormatException e) {
        dLatitude = 0.0;
    }
    try {
        dLongitude = Double.parseDouble((sRawRecord.substring(38, 46)).trim());
    } catch (java.lang.NumberFormatException e) {
        dLongitude = 0.0;
    }
    try {
        dMagnitude = Double.parseDouble((sRawRecord.substring(46, 49)).trim());
    } catch (java.lang.NumberFormatException e) {
        dMagnitude = 0.0;
    }
    try {
        nDepth = Integer.parseInt((sRawRecord.substring(50, 54)).trim());
    } catch (java.lang.NumberFormatException e) {
        nDepth = 0;
    }
    try {
        nEpicentre = Integer.parseInt((sRawRecord.substring(56, 61)).trim());
    } catch (java.lang.NumberFormatException e) {
        nEpicentre = 0;
    }
    try {
        dCityLatitude = Double.parseDouble((sRawRecord.substring(62, 71)).trim());
    } catch (java.lang.NumberFormatException e) {
        dCityLatitude = 0.0;
    }
    try {
        dCityLongitude = Double.parseDouble((sRawRecord.substring(72, 81)).trim());
    } catch (java.lang.NumberFormatException e) {
        dCityLongitude = 0.0;
    }
    sCityName = sRawRecord.substring(93, 124).trim();
}
public int getYear() { return nYear; }
public int getMonth() { return nMonth; }
public int getDay() { return nDay; }
public int getHour() { return nHour; }
public int getMinute() { return nMinute; }
public double getSecond() { return dSecond; }
public int getUTC() { return nUTC; }
public double getLatitude() { return dLatitude; }
public double getLongitude() { return dLongitude; }
public double getMagnitude() { return dMagnitude; }
public int getDepth() { return nDepth; }
public int getEpicentre() { return nEpicentre; }
public double getCityLatitude() { return dCityLatitude; }
public double getCityLongitude() { return dCityLongitude; }
public String getCityName() { return sCityName; }

public String toString() {
    return String.format("%4d/%2d/%2d %2d:%2d:%2.1f %d Lat/Long:%6.2f,%6.2f Mag:%3.1f     Depth:%4d %5d %6.2f:%6.2f %s", nYear, nMonth, nDay, nHour, nMinute, dSecond, nUTC,     dLatitude, dLongitude,
        dMagnitude, nDepth, nEpicentre, dCityLatitude, dCityLongitude, sCityName);
}
public static class CompareMagnitude implements Comparator<EarthquakeRecord> {
    public final static CompareMagnitude instance = new CompareMagnitude();
    public int compare(EarthquakeRecord arg0, EarthquakeRecord arg1) {
        if(arg0.dMagnitude < arg1.dMagnitude){
        return(-1);
        }
        else if(arg0.dMagnitude > arg1.dMagnitude){
        return(1);
        }
        else{
        return(0);
        }
    }
}

/** Singleton public static inner class that creates a <i>Comparator</i> object if needed; used to compare <i>EarthquakeRecord</i> objects based on <i>String</i> containing City Name */
// TODO implement the following class
public static class CompareCity implements Comparator<EarthquakeRecord> {
    public final static CompareCity instance = new CompareCity();
    public int compare(EarthquakeRecord arg0, EarthquakeRecord arg1) {return arg0.sCityName.compareTo(arg1.sCityName);}
}
/** Singleton public static inner class that creates a <i>Comparator</i> object if needed; used to compare <i>EarthquakeRecord</i> objects based on <i>nDepth</i> */
// TODO implement the following class
public static class CompareDepth implements Comparator<EarthquakeRecord> {
    public final static CompareDepth instance = new CompareDepth();
    public int compare(EarthquakeRecord arg0, EarthquakeRecord arg1) {
        if(arg0.nDepth < arg1.nDepth){
        return(-1);
        }
        else if(arg0.nDepth > arg1.nDepth){
        return(1);
        }
        else{
        return(0);
        }
    }


}}
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import javax.swing.JOptionPane;


public class EarthquakeDataSet<aeqrDepthSort> {

private int nNumRecordsLoaded;

private EarthquakeRecord[] aeqrOriginalOrder; 

private EarthquakeRecord[] aeqrCitySort; 

private EarthquakeRecord[] aeqrDepthSort; 

private EarthquakeRecord[] aeqrMagnitudeSort;

public EarthquakeDataSet() { }


public long loadDataFromFile(File file) throws FileNotFoundException, Exception {
    Scanner scanInput = new Scanner(file); 
    int nMaxNumRecords;
    do { 
        nMaxNumRecords = Integer.parseInt(JOptionPane.showInputDialog("Maximum     Number of Records: "));
    } while (nMaxNumRecords <= 0);

    nNumRecordsLoaded = 0; 
    long lStartTime = System.currentTimeMillis(); 
    aeqrOriginalOrder = new EarthquakeRecord[nMaxNumRecords]; 
    try { 
        while (nNumRecordsLoaded < nMaxNumRecords && scanInput.hasNext()) {
            String sRawRecord = scanInput.nextLine(); 
aeqrOriginalOrder[nNumRecordsLoaded++] = new EarthquakeRecord(sRawRecord); 
        }
    } catch (Exception e) {
        throw new Exception("Input failure at record: " + nNumRecordsLoaded);
    } finally {
        scanInput.close(); 
    }
    System.out.printf("Number Records Loaded: %d", nNumRecordsLoaded);
    return System.currentTimeMillis() - lStartTime; 
}
public long copyOriginalArray() {

    long lStartTime = System.currentTimeMillis();

    aeqrCitySort = Arrays.copyOf(aeqrOriginalOrder, aeqrOriginalOrder.length);

    aeqrMagnitudeSort = Arrays.copyOf(aeqrOriginalOrder, aeqrOriginalOrder.length);

    aeqrDepthSort = Arrays.copyOf(aeqrOriginalOrder, aeqrOriginalOrder.length);
    return System.currentTimeMillis() - lStartTime; 
}


public void sortNativeJava() {

    System.out.println("\nSorting with native Java Sort");
    long lStartTime = System.currentTimeMillis();

    Arrays.sort(aeqrCitySort, EarthquakeRecord.CompareCity.instance);

    long lElapseTime = System.currentTimeMillis() - lStartTime;
    System.out.println("Native Java Sort: City Name: Elapsed time: " + ((float)     lElapseTime) / 1000.0);

    lStartTime = System.currentTimeMillis();

    Arrays.sort(aeqrDepthSort, EarthquakeRecord.CompareDepth.instance);

    lElapseTime = System.currentTimeMillis() - lStartTime;
    System.out.println("Native Java Sort: Depth: Elapsed time: " + ((float)     lElapseTime) / 1000.0);

    lStartTime = System.currentTimeMillis();

    Arrays.sort(aeqrMagnitudeSort, EarthquakeRecord.CompareMagnitude.instance);

    lElapseTime = System.currentTimeMillis() - lStartTime;
    System.out.println("Native Java Sort: Magnitude: Elapsed time: " + ((float)     lElapseTime) / 1000.0);
}

public void display() {
    String[] asSortKeys = { "Original", "City Name", "Magnitude", "Depth" };
    String sReturnValue = (String) JOptionPane.showInputDialog(null, "Select array to sequence display:", "Key Sequence", JOptionPane.INFORMATION_MESSAGE, null, asSortKeys, asSortKeys[0]);
    if (sReturnValue == asSortKeys[0])
        display("Original Sequence", aeqrOriginalOrder);
    else if (sReturnValue == asSortKeys[1])
        display("City Name Sequence", aeqrCitySort);
    else if (sReturnValue == asSortKeys[2])
        display("Magnitude Sequence", aeqrMagnitudeSort);
    else
        display("Depth Sequence", aeqrDepthSort);
}


private void display(String rsLabel, EarthquakeRecord[] raeqrDataSet) {
    if (raeqrDataSet == null) {
        JOptionPane.showMessageDialog(null, "Error: Selected array not yet populated.");
        return;
    }

    System.out.println(rsLabel);
    if (nNumRecordsLoaded < 30)
        for (int i = 0; i < nNumRecordsLoaded; ++i)
            System.out.println(raeqrDataSet[i]);
    else {
        System.out.println("First 10 records:");
        for (int i = 0; i < 10; ++i)
            System.out.println(raeqrDataSet[i]);

        System.out.println("Middle 10 records:");
        int nStart = nNumRecordsLoaded / 2 - 5;
        int nEnd = nStart + 10;
        for (int i = nStart; i < nEnd; ++i)
            System.out.println(raeqrDataSet[i]);

        System.out.println("Last 10 records:");
        for (int i = nNumRecordsLoaded - 10; i < nNumRecordsLoaded; ++i)
            System.out.println(raeqrDataSet[i]);
    }
}


public String toString1() { return "Number of Records: " + nNumRecordsLoaded; }
 private int[] data; 
   private static final Random generator = new Random();

   public MergeSort( int size )
   {
      data = new int[ size ]; 

      for ( int i = 0; i < size; i++ )
         data[ i ] = 10 + generator.nextInt( 90 );
   } 

   public void sort()
   {
      sortArray( 0, data.length - 1 ); 
   } 
   private void sortArray( int low, int high ) 
   {

      if ( ( high - low ) >= 1 ) 
      {
         int middle1 = ( low + high ) / 2; 
         int middle2 = middle1 + 1; 

         System.out.println( "split:   " + subarray( low, high ) );
         System.out.println( "         " + subarray( low, middle1 ) );
         System.out.println( "         " + subarray( middle2, high ) );
         System.out.println();

         sortArray( low, middle1 ); 
         sortArray( middle2, high );


         merge ( low, middle1, middle2, high );
      } 
   } 

   private void merge( int left, int middle1, int middle2, int right ) 
   {
      int leftIndex = left;
      int rightIndex = middle2; 
      int combinedIndex = left; 
      int[] combined = new int[ data.length ]; 

      System.out.println( "merge:   " + subarray( left, middle1 ) );
      System.out.println( "         " + subarray( middle2, right ) );

      while ( leftIndex <= middle1 && rightIndex <= right )
      {
         if ( data[ leftIndex ] <= data[ rightIndex ] )
            combined[ combinedIndex++ ] = data[ leftIndex++ ]; 
         else 
            combined[ combinedIndex++ ] = data[ rightIndex++ ];
      }
      if ( leftIndex == middle2 )
         while ( rightIndex <= right )
            combined[ combinedIndex++ ] = data[ rightIndex++ ];
      else 
         while ( leftIndex <= middle1 ) 
            combined[ combinedIndex++ ] = data[ leftIndex++ ];      

      for ( int i = left; i <= right; i++ )
         data[ i ] = combined[ i ];


      System.out.println( "         " + subarray( left, right ) );
      System.out.println();
   } 

   public String subarray( int low, int high )
   {
      StringBuilder temporary = new StringBuilder();


      for ( int i = 0; i < low; i++ )
         temporary.append( "   " );


      for ( int i = low; i <= high; i++ )
         temporary.append( " " + data[ i ] );

      return temporary.toString();
   } 

   public String toString()
   {
      return subarray( 0, data.length - 1 );
   }  
} 
if ( data[ leftIndex ] <= data[ rightIndex ] )
if ( cmp.compare(data[ leftIndex ], date[ rightIndex ]) <= 0 )