java 中的 if else 语句中的 Jama 矩阵和逻辑错误
Jama matrix and Logical error in if else statement in java
我尝试实现一些代码block.I有四个数组。
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
所以请帮我找出逻辑错误。
我认为最简单的方法就是将所有内容转储到一个 ArrayList
中,然后调用 sort(Comparator)
按时间对数据进行排序。
数据排序后加入矩阵
唯一真正的技巧是声明一个 class 来保存数据对,以便可以轻松地对它们进行排序。在你拥有它之后,它实际上是一行代码来对它们进行排序。
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 ) {}
}
我尝试实现一些代码block.I有四个数组。
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
所以请帮我找出逻辑错误。
我认为最简单的方法就是将所有内容转储到一个 ArrayList
中,然后调用 sort(Comparator)
按时间对数据进行排序。
数据排序后加入矩阵
唯一真正的技巧是声明一个 class 来保存数据对,以便可以轻松地对它们进行排序。在你拥有它之后,它实际上是一行代码来对它们进行排序。
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 ) {}
}