【问题标题】:Jama matrix and Logical error in if else statement in javaJava中if else语句中的Jama矩阵和逻辑错误
【发布时间】:2018-08-08 18:05:34
【问题描述】:

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

    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

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

【问题讨论】:

  • 你能显示Matrix类吗?
  • 这是 Jama 矩阵。这是 if else 语句的逻辑错误。我不认为这是矩阵的问题。

标签: java arrays sorting matrix jama


【解决方案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 ) {}
}

【讨论】:

  • 此代码抛出错误。错误:(11, 47) java:-source 1.5 中不支持菱形运算符(使用 -source 7 或更高版本来启用菱形运算符)错误:(19, 49) java:-source 1.5 中不支持方法引用(使用-source 8 或更高版本以启用方法引用)
  • 那么,您为什么使用 Java 1.5?它真的很旧。 @Saswati
  • 谢谢。它运作良好。我只是添加了一点点修改。public String toString() 函数在输出屏幕中显示值。我不需要那样显示输出。相反,我打印 abc 矩阵。所以我关闭了 public String toString() 函数。它运作良好。 :)
猜你喜欢
  • 1970-01-01
  • 2018-03-12
  • 2014-02-19
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多