Кажется, моя Java-программа застряла (?) В точке во время выполнения. Я сбит с толку.

Итак, я пытаюсь создать драйвер для моего метода. Заранее извиняюсь, я очень мало знаю о чем говорю. Что программа делает, так это вычисляет синус, косинус и экспоненциальную функцию с помощью ряда Тейлора для числа, которое вводит пользователь. Использование Math.pow и Math.fact не было разрешено. Мой компилятор не дает мне никаких ошибок, и у меня нет идей на данный момент. Кроме того, кажется, что сканер не прекращает принимать ввод после нажатия клавиши ввода. Он продолжает принимать цифры, но больше ничего не делает. Это дает исключение, когда я набираю письмо. Высокая вероятность ошибки ID10T. Я знаю, что вывод еще не отформатирован, но это потому, что у меня еще не было возможности его увидеть. Если бы кто-то мог помочь мне понять это, я был бы очень благодарен. Заранее спасибо!

Стремительный код обезьяны

Водитель (Lab4.java)

/*
  This program is being created to solve Lab 4.
*/
import java.util.*;
public class Lab4
{
  public static void main(String[] args)
  {
    String again, more = "y";

    while (more.toUpperCase().charAt(0) == 'Y')
    {
     Scanner keyboard = new Scanner (System.in);
      System.out.println("Input X: ");

         Function number = new Function();
           double x = number.x();
           System.out.println("x = " + x);

         Function sine = new Function();         
            double mySin = sine.funcSine();

         Function cosine = new Function();
            double myCos = cosine.funcCos();

         Function expo = new Function();      
            double myExp = expo.funcExp();   

     System.out.println("\t\t\t\tLibraryResult       My Result");
     System.out.println("\n\t\tsin("  + Function.x() + ")" + " = " + "\t\t\t" + Math.sin(Function.x()) + "\t" + mySin);  
     System.out.println("\n\t\tcos("  + Function.x() + ")" + " = " + "\t\t\t" + Math.cos(Function.x()) + "\t" + myCos); 
     System.out.println("\n\t\texp("  + Function.x() + ")" + " = " + "\t\t\t" + Math.exp(Function.x()) + "\t" + myExp);
     System.out.println("\n\t\t\tDo more (Y/N) ? ");
     more = keyboard.next();
     String junk = keyboard.nextLine();
    }
  }
}

Метод (Function.java)

/*
  This class provides the information for the parent to use in order to solve Lab 4.
*/


import java.util.*;
public class Function
{

    Scanner keyboard = new Scanner(System.in);
       public static int number;
       private double temp = 1;
       private double last = 1;


    public static double x()
    {
      Scanner keyboard = new Scanner(System.in);
      double x = keyboard.nextDouble();
      return x;
    }  

    public static double pow(double value, double power)
    {
       if(power == 0)
       {
          return 1;
       }
         double result = value;
         for(int i = 0; i < power -1; i++)
       {
          result = result * value; 
       }
       return result;
    }

    public static double getFact()
    {
       while (number < 0)
       {
           number =(number * -1);
       } 
       double factorial = 1;
       if (0 == (number % 1))
       {
          do
          {
             factorial = factorial * number;
             --number;

          } while (number >= 1);

       }
       else     //Stirling's Approximation
        {
           double e = 2.718281828459;
           double part1 = Math.sqrt(2 * 3.141592653589 * number);
           double part2a = (number / e);
           double part2b = (pow(part2a,number));
           factorial = (part1 * part2b);
        }
            return factorial;
    }

    public static double funcSine()
    {
        int place = 0;  
        double next = x()*1;
        for(number = 3; number <= 30; number = number + 2)
        {                    
           next = next + ((pow((-1),place))*((pow(x(),number))/(getFact())));
           place = place + 1;
        }
        double mySin = next * 1;
        return mySin;
    }

    public static double funcCos()
    {
      int place = 0;
      double next = 1;
      for(number = 2; number <= 30; number = number + 2)
      {
         next = next + ((pow(-1,place))*((pow(x(),number))/(getFact())));
         place = place + 1;
      }
      double myCos = next * 1;
      return myCos;
    }
    public static double funcExp()
    {
       int place = 0;
       double next = 1 + x();
       for(number = 1; number <= 30; number++)
       {
          next = next + ((pow(-1,place))*((pow(x(),number))/(getFact())));
          place = place + 1; 
       }
       double myExp = next * 1;
       return myExp;
    }
}

1 ответ

Проверьте синтаксис вашего цикла while:

 while (more.toUpperCase().charAt(0) == 'Y')

Подумайте, когда программа никогда не будет удовлетворять этому выражению.

Также у вас есть несколько сканеров по всему вашему коду. Неясно, почему вы должны продолжать читать снова и снова.

Другие вопросы по тегам