我尝试实现一些代码块。我有四个数组。
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 ... etc
我想写一个程序,将那些时间和相对于时间的速度合并。
所以愿望输出将是
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
所以请帮助我找出逻辑错误。
答案 0 :(得分: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 ) {}
}