2013-04-04 4 views
3

Я должен создать программу, которая запрашивает у пользователя число и принимает факториал этого числа, затем спрашивает, хотят ли они сделать еще один факториал (Y, N).Java factorial output

Он должен работать так:

  • Введите номер, чтобы принять факториала: 4
  • 4! = 24
  • Сделайте еще один факториал (Y, N)? Y
  • Повторять до N вводится

Мой вывод, как:

  • Введите номер, чтобы принять факториала: "? Есть ли другой факторный (Y, N)"
  • 4! = 1, независимо от того, поступают ли я Y или N.

    Вот мой код:

    import java.util.Scanner; 
    public class factorial 
    { 
        public static void main (String [] args) 
        { 
        Scanner input = new Scanner(System.in); 
        System.out.print("Enter a number you want to take the factorial of: "); 
        int num = input.nextInt(); 
        int fact = 1; 
        System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact)); 
    } 
        public static int Factorial(int num, int fact) 
        { 
         Scanner input = new Scanner(System.in); 
         char foo; 
    
          System.out.print("Do another factorial (Y,N)?"); 
          foo = input.next().charAt(0); 
    
          for (int i = 1; i >= num; i++) 
          { 
           fact *= i; 
           if (foo == 'Y') 
           { 
            System.out.print("Do another factorial (Y,N)?"); 
            foo = input.next().charAt(0); 
            continue; 
           } 
           else 
           { 
            break; 
           } 
          } 
          return fact; 
    
        } 
    
    } 
    

После изменения:

import java.util.Scanner; 
public class factorial 
{ 
    public static void main (String [] args) 
    { 
     Scanner input = new Scanner(System.in); 

     System.out.print("Enter a number you want to take the factorial of: "); 
     int num = input.nextInt(); 

     int fact = 1; 

     System.out.printf("%d! = %d\n ", num, Factorial(num, fact)); 

     System.out.print("Do another factorial (Y,N)? "); 
     char foo = input.next().charAt(0); 

     while (foo != 'N') 
     { 
      System.out.print("Do another factorial (Y,N)? "); 
      foo = input.next().charAt(0); 

     System.out.print("Enter a number you want to take the factorial of: "); 
     num = input.nextInt(); 

     System.out.printf("%d! = %d\n", num, Factorial(num, fact)); 
    } 
} 
    public static int Factorial(int num, int fact) 
    { 
     for (int i = 1; i <= num; i++) 
      { 
       fact *= i; 
      } 
      return fact; 
    } 

}

выход все еще имеет некоторые проблемы :

  • Введите число, чтобы принять факториал: 4
  • 4! = 24
  • Сделайте еще один факториал (Y, N)? Y
  • Сделайте еще один факториал (Y, N)? Y
  • Введите число, чтобы принять факториал: 4
  • 4! = 24
  • Сделайте еще один факториал (Y, N)? N
  • Введите номер, чтобы принять факториала:

ответ

3

Вы вычисляете факториал, но никогда не печатаете его:

System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact)); 

должен быть

System.out.printf("%d! = %d\n ", num, Factorial(num, fact)); 

Кроме того, ваша Factorial функция не использует параметра fact, так что вы должны удалить его и объявить локальную переменную внутри функции.

И, наконец, просить «вы хотите другой факториал» должно быть сделано на верхнем уровне, а не внутри функции Factorial. В вашем коде не используется символ, который вводит пользователь: вам понадобится цикл, который проверяет ввод пользователя и продолжается, пока введено значение Y.

+0

Как именно я бы реализовать цикл, который проверяет, ввел ли пользователь Y или N затем запрашивает у пользователя другой номер? Извините, я довольно новичок в java. – user1858350

+0

Выяснено, как проверить, введен ли пользователь Y или N, но теперь я зациклился на том, как делать факториальные вычисления снова после того, как пользователь вводит Y – user1858350

+0

@ user1858350. Вы можете отредактировать свой вопрос и опубликовать свой новый код в отдельном «после изменения». – dasblinkenlight

1

Здесь ошибка:

System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact)) 

Ваш выход не очень Factorial(num, fact) но fact, это должно быть:

System.out.printf("%d! = %d\n ", num, Factorial(num, fact)) 
0

Удалить следующие строки кода:

вход Сканер = новый сканер (System.in); System.out.print («Сделайте еще один факториал (Y, N)?»);

из Factorial способ.

0

Вы должны реорганизовать свой код следующим образом:

  • Там должен быть метод, который принимает int и возвращает его факториал, и ничего не делает.

  • Все вход/выход, а также «Сделайте еще один факториал?». цикл, должен быть выполнен в main().

Это упростит правильную логику.

0

Это поможет вам.

public static void main (String [] args) 
    { 
    String yesno ="Y"; 
    while(yesno.equalsIgnoreCase("y")) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter a number you want to take the factorial of: "); 
     int num = input.nextInt(); 
     System.out.printf("%d! = %d\n ",num,fact(num)); 
     System.out.print("Do another factorial (Y,N)?"); 
     Scanner inputKey = new Scanner(System.in); 
     yesno = inputKey.nextLine(); 

    } 
    } 

Вот факториала:

public static int fact(int num) 
    { 
     if(num<=1) 
     { 
      return 1; 

     }else{ 
      return (num*(fact(num-1))); 
     } 
    }