Java: проблема с вычислением корня заданного многочлена

Я пытаюсь ввести цикл for для подинтервала, который образует раздел другого в указанном диапазоне, чтобы вычислить корни данного многочлена. Моя проблема в том, что мои «если» и «если-иначе» не выполняются, даже когда условия должны обеспечивать их выполнение. Я протестировал свою «полигональную» функцию в других частях программы и не обнаружил проблем. Вот мой проблемный цикл 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;
     }
  }

person Annabella Sakasai    schedule 10.05.2015    source источник


Ответы (2)


Вы хотите удалить набор скобок, который начинается непосредственно перед словом «если».

person La-comadreja    schedule 10.05.2015
comment
Спасибо! Я исправил ошибку со скобками, но теперь столкнулся с новой проблемой в исходном коде, предшествующем циклу for. Я хочу назначить L и R, используя класс Scanner, то есть L =scanner.nextInt() и R=scanner.nextInt(). Входной поток не закрывается после присваивания и, следовательно, не входит в цикл for: System.out.println(Введите конечные точки Left и Right: ); L = sc.nextInt(); R = sc.nextInt(); for (int i = L; i ‹ R; i++) { // код} - person Annabella Sakasai; 10.05.2015

У вас есть лишний набор скобок, которые следует удалить. Эти скобки заставляют предложения else if и else применяться к внутреннему 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;
}
person Mureinik    schedule 10.05.2015
comment
Я исправил ошибку со скобками, но теперь столкнулся с новой проблемой в исходном коде, предшествующем циклу for. Закрытие входного потока System.out.println(Введите конечные точки Left и Right: ); L = sc.nextInt(); R = sc.nextInt(); - person Annabella Sakasai; 10.05.2015