Матрица 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 ) {}
}