1

特定の多項式の根を計算するために、指定された範囲内で別のパーティションを形成するサブインターバルで for ループに入ろうとしています。私の問題は、条件が実行を保証する必要がある場合でも、「if」と「if-else」が実行されないことです。プログラムの他の部分で "poly" 関数をテストしましたが、問題は見つかりませんでした。これが私の厄介な for ループです。

for (int i = L; i < R; i += resolution) {
       double a = i, b = resolution+i;
       { if (poly(C, a)*poly(C, b) < 0) {
          double mid = findRoot(C, a, b, tolerance);
          System.out.println(mid);
          if (Math.abs(poly(C, mid)) < threshold){
            System.out.println("Root found at: "+mid);
            numCount = 1;
          }
       } else if (poly(D, a)*poly(D, b) < 0) {
          double mid = findRoot(D, a, b, tolerance);
          if(Math.abs(poly(C, mid)) < threshold) {
            System.out.println("Root found at: "+mid);
            numCount = 2;

       } else {
         numCount = 3;
         System.out.println("No roots were found in the specified range.");
       } System.out.println("numCount is "+numCount); break;
     }
  }
4

2 に答える 2

0

「if」という単語の直前にある括弧のセットを削除したいとします。

于 2015-05-10T18:03:06.847 に答える
0

削除する必要があるブラケットの冗長セットがあります。これらの括弧はelse ifandelse句を inner に適用しますがif、これは正しくありません:

for (int i = L; i < R; i += resolution) {
   double a = i, b = resolution+i;
   if (poly(C, a)*poly(C, b) < 0) {
      double mid = findRoot(C, a, b, tolerance);
      System.out.println(mid);
      if (Math.abs(poly(C, mid)) < threshold){
        System.out.println("Root found at: "+mid);
        numCount = 1;
      }
   } else if (poly(D, a)*poly(D, b) < 0) {
      double mid = findRoot(D, a, b, tolerance);
      if(Math.abs(poly(C, mid)) < threshold) {
        System.out.println("Root found at: "+mid);
        numCount = 2;

   } else {
     numCount = 3;
     System.out.println("No roots were found in the specified range.");
   } 
   System.out.println("numCount is "+numCount); break;
}
于 2015-05-10T18:05:24.580 に答える