Матрица Jama и логическая ошибка в операторе if else в Java

Я пытаюсь реализовать некоторый блок кода. У меня есть четыре массива.

    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-й массив определяет временную метку и относительную скорость, соответствующую каждому временному блоку.

Как во времени 1.0 скорость равна 11.0, во времени 2.0 скорость равна 12.0, во времени 3.0 скорость равна 8.0.... и т. Д.

3-й массив определяет временную метку 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

Поэтому, пожалуйста, помогите мне выяснить логическую ошибку.

1 ответ

Решение

Я думаю, что самый простой способ сделать это просто свалить все в один 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 ) {}
}
Другие вопросы по тегам