将代码从notepad ++传输到命令提示符

时间:2015-05-10 14:50:26

标签: java arrays enums polynomials

我对java比较新,所以如果我在这里遗漏了一些明显的东西,我也不会感到惊讶。无论如何,我做了一个代码,使用Bisection方法找到多项式的根。我认为该程序一切顺利,直到我将它从notepad ++粘贴到命令提示符,在使用javac编译它之后,我最终得到了一堆“class,interface或enum expected”错误。代码本身的一切似乎都很好,所以我推断出我已经犯了以下两个错误之一:当我复制并粘贴到命令提示符时出现了错误,或者我确实在我的代码中创建了一个错误我没抓到。有人能告诉我我做错了什么吗?它可能是一个小修复,但我只是不知道如何更改它以使我的代码工作。这是代码:

import java.util.*;

class Roots {

  public static int degree;
  public static double[] coArrayC;
  public static double[] coArrayD;
  public static int coeffVal;

  public static void main( String[] args ){
        double resolution = 0.01;
        double tolerance = 0.0000001;
        double threshold = 0.001;

        double rightEndPt;
        double leftEndPt;
        int polyRootPointer = 0;
        int diffRootPointer = 0;

        boolean rootAns = false;

        Scanner sc = new Scanner(System.in);


        System.out.println();

        System.out.print("Enter the degree: "); //prompts user to enter the correct degree of the polynomial
        degree = sc.nextInt();

        coeffVal = degree + 1; //the coefficient is one more than the number of degrees
        System.out.print("Enter " + coeffVal + " coefficients: "); //adds in the value of the polynomial coefficient in to the line that prompts the user to specify which coefficients are in the function
        double[] coefficients = new double[coeffVal]; //initialization of array, a bunch of doubles that represent the coefficients of the user's polynomial
        coArrayC = new double[coeffVal]; //naming the array

        double[] rootArray = new double[degree];//another array for the degrees of the polynomial

        coArrayD = new double[coeffVal]; //and assigning it a name

        for(int i = 0; i < coeffVal; i++) {
              coefficients[i] = sc.nextDouble();
        }
        System.out.print("Enter the right and left endpoints, in that order: "); //prompts user to enter the interval limits
        rightEndPt = sc.nextDouble();
        leftEndPt = sc.nextDouble();


        diff(coefficients); //calculates coefficients of derivative polynomial

        for (double i = leftEndPt; i < rightEndPt-resolution; i = i + resolution){ //
              if (isPositive(coArrayD, i) != isPositive(coArrayD, i+resolution) || isPositive(coArrayD, i) == 0) {
                    rootArrayDeriv[diffRootPointer] = findRoot(coArrayD, i, i+resolution, tolerance);
                    diffRootPointer++;
              }
        }

        for (int i = 0; i < rootArrayDeriv.length; i++) {
              double tempValue;
              tempValue = poly(coefficients, rootArrayDeriv[i]);
              tempValue = Math.abs(tempValue);
              if (tempValue < threshold) {
                    rootArray[polyRootPointer] = rootArrayDeriv[i];
                    polyRootPointer++;
                    rootAns = true;
              }
        }

        for (double i = leftEndPt; i < rightEndPt-resolution; i = i + resolution){
              if (isPositive(coefficients, i) != isPositive(coefficients, i+resolution) || isPositive(coefficients, i) == 0) {
                    rootArray[polyRootPointer] = findRoot(coefficients, i, i+resolution, tolerance);
                    polyRootPointer++;
                    rootAns = true;
              }
        }

        //Arrays.sort(rootArray); //sorts array from lowest to highest

        if (rootAns == true) {
            System.out.println("Sorry - no roots were found in the specified interval.");
                    }
              }
        } else {
            for (int i = 0; i < rootArray.length; i++) {
                if (rootArray[i] != 0.0) {
                    System.out.printf("Root found at %.5f\n :" Arrays.sort(rootArray[i])); //if roots are found, list them as an output, with five decimal places of accuracy
        }
  }

  static double poly(double[] C, double x){
        double polySum = 0;
        coArrayC[0] = C[0];
        for (int i = 1; i < coArrayC.length; i++){
              coArrayC[i] = C[i]*(Math.pow(x, i)); //multiplies each coefficient by the designated power of X
        }
        for (int i = 0; i < coArrayC.length; i++){
              polySum = polySum + coArrayC[i]; //accumulates the sum of of all the terms, after the coeff. were multiplied to their respective powers.
        }
        return(polySum);

  }

  static double[] diff(double[] C){ 
        for (int i = 0; i < degree; i++){
              coArrayD[i] = (i+1)*C[i+1]; //newly allocated array D containing coeff. of the polynomial that is the derivative of the polynomial with coeff. array C.
        }
        return(coArrayD);
  }

  static double findRoot(double[] C, double a, double b, double tolerance){ //using bisection method; similar to findRoot.java in cmps webpage.
        double root = 0.0 , residual;
        while ( Math.abs(b - a) > tolerance ) { 
              root = (a + b) / 2.0;
              residual = poly(C, root);
              if (poly(C, a) < 0 && poly(C, b) < 0) { 
                    if (residual > 0)
                          b = root;
                    else
                          a = root;                       
              } else if (poly(C, a) > 0 && poly(C, b) > 0) { 
                    if (residual > 0)
                          a = root;  //replace left endpoint
                    else
                          b = root; //replace right endpoint
              }
        }
        return(root);
  }

  static int isPositive(double[] C, double a){
        double endpointTempA;
        endpointTempA = poly(C, a);
        if (endpointTempA < 0) {
              return(1);
        } else if (endpointTempA > 0) {
              return(2);
        } else {
              return(0); 
        }
  }
}

1 个答案:

答案 0 :(得分:0)

这里有两个}太多了:

    if (rootAns == true) {
        System.out.println("Sorry - no roots were found in the specified interval.");
                }
          }
    } else {

如果您正确缩进代码,则更容易看到这些类型的错误。删除不属于那里的两个}

    if (rootAns == true) {
        System.out.println("Sorry - no roots were found in the specified interval.");
    } else {

这里还缺少,,你不应该将double传递给Arrays.sort,而是整个数组

System.out.printf("Root found at %.5f\n :"Arrays.sort(rootArray[i]));

应该是:

System.out.printf("Root found at %.5f\n :", Arrays.sort(rootArray));

缺少}

不是一次编写整个程序然后尝试编译它,而是一点一点地编写它,并在每次有一个完整的方法时编译它。这样你就可以避免让一大堆小错误让你迷惑。