1

我尝试实现一些代码块。我有四个数组。

    double[]timea={1.0,2.0,3.0,4.0,5.0,6.0};
    double[]speed={11.0,12.0,8.0,13.0,9.0,6.0};
    double[]timeb={1.5,2.5,4.0,5.5};
    double[]speedb={12.3,8.5,6.9,7.8};

第一个数组定义了一些时间,比如时间戳和每个时间块对应的一些相对速度。

就像时间 1.0 速度是 11.0,时间 2.0 速度是 12.0,时间 3.0 速度是 8.0.... 等等。

第三个数组以相应的速度定义时间戳 b。就像在时间 1.5 速度是 12.3,在时间 2.5 速度是 3.8,在时间 4.0 速度是 5.6 ...等等

我想写一个程序来合并这些时间和相对于时间的速度。

所以欲望输出将是

1.0 11.0
1.5 12.3
2.0 12.0
2.5 8.5
3.0 8.0
4.0 13.0
4.0  6.9
5.0  9.0
5.5  7.8
6.0  6.0

我为此写了一个代码

public class Check {
public static void main(String args[]){
    Matrix abc=new Matrix(10,2);
    double[]timea={1.0,2.0,3.0,4.0,5.0,6.0};
    double[]speed={11.0,12.0,8.0,13.0,9.0,6.0};
    double[]timeb={1.5,2.5,4.0,5.5};
    double[]speedb={12.3,8.5,6.9,7.8};
    int k=0,k1=0;
    while(k<timea.length){

            abc.set(k, 0, timea[k]);
            abc.set(k, 1, speed[k]);

        if(timea[k]<timeb[k1]){
            abc.set(k,0,timeb[k1]);
            abc.set(k,1,speedb[k1]);
            if(k1<timeb.length-1){
                k1++;
            }
        }
        else if(timea[k]>timeb[k1]){
            abc.set(k,0,timea[k]);
            abc.set(k,1,speed[k]);
        }
        k++;
    }
    abc.print(3,6);
}

}

程序输出:

1.500000 12.300000
2.500000 8.500000
4.000000 6.900000
5.500000 7.800000
5.500000 7.800000
6.000000 6.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000

所以请帮我找出逻辑错误。

4

1 回答 1

0

我认为最简单的方法就是将所有内容转储为一个ArrayList,然后调用sort(Comparator)按时间对数据进行排序。

数据排序后,将其添加到矩阵中。

唯一真正的技巧是声明一个类来保存数据对,以便可以轻松地对它们进行排序。在你拥有它之后,它实际上是一行代码来对它们进行排序。

public class PairwiseSort {

   public static void main( String[] args ) {
      double[] timea = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
      double[] speed = {11.0, 12.0, 8.0, 13.0, 9.0, 6.0};
      double[] timeb = {1.5, 2.5, 4.0, 5.5};
      double[] speedb = {12.3, 8.5, 6.9, 7.8};

      ArrayList<Datum> data = new ArrayList<>();
      for( int i = 0; i < speed.length; i++ ) {
         data.add( new Datum( timea[i], speed[i] ) );
      }
      for( int i = 0; i < speedb.length; i++ ) {
         data.add( new Datum( timeb[i], speedb[i] ) );
      }

      data.sort( Comparator.comparing( Datum::getTime ) );
      System.out.println( data );

      Matrix abc=new Matrix(10,2);
      for( int i = 0; i < data.size(); i++ ) {
         Datum datum = data.get( i );
         abc.set( i, 0, datum.getTime() );
         abc.set( i, 1, datum.getSpeed() );

      }

   }
}

class Datum {

   double time;
   double speed;

   public Datum( double time, double speed ) {
      this.time = time;
      this.speed = speed;
   }

   public double getTime() {
      return time;
   }

   public void setTime( double time ) {
      this.time = time;
   }

   public double getSpeed() {
      return speed;
   }

   public void setSpeed( double speed ) {
      this.speed = speed;
   }

   @Override
   public String toString() {
      return "Datum{" + "time=" + time + ", speed=" + speed + '}';
   }

}

class Matrix {
   Matrix( int a, int b ) {}
   void set( int a, int b, double x ) {}
}
于 2018-08-08T19:35:26.040 回答