2016-10-17 2 views
-3

Калькулятор запрашивает у пользователя два номера, но если пользователь выбирает факториальный оператор (!), Мне нужно, чтобы он запрашивал у пользователя только один номер. Может кто-то помочь мне с этим?Java Calculator program factorical

public static void main(String[] args) throws IOException { 

    Scanner in; 
    in = new Scanner(System.in); 

    char nextChar; 
    char oper; 
    int num1 = 0; 
    int num2 = 0; 
    int base = 2; 
    int exp = 10; 

    System.out.println("Please enter operator"); 
    oper = in.nextLine().charAt(0); 
    System.out.println("The operator is " + oper); 

    System.out.println("Please enter the first number"); 
    num1 = in.nextInt(); 
    System.out.println("The first number is " + num1); 

    if (oper =='!') 
    { 
     System.out.println("Please enter the first number"); 
     num1 = in.nextInt(); 
     System.out.println("The first number is " + num1); 
    } else { 
     System.out.println("Please enter the second number"); 
     num2 = in.nextInt(); 
     System.out.println("The second number is " + num2); 
    } 

    switch (oper) { 

     case '+': 
      System.out.println("The answer is " + (num1 + num2));//addition 
      break; 
     case '-': 
      System.out.println("The answer is " + (num1 - num2));//subtraction 
      break; 
     case '*': 
      System.out.println("The answer is " + (num1 * num2));//multiplication 
      break; 
     case '/': 
      System.out.println("The answer is " + (num1/num2));//division 
      break; 
     case '%': 
      System.out.println("The answer is " + (num1 % num2));//remainder 
      break; 
     case 'p': 
      System.out.println("The answer is " + exponent(num1,num2));//exponent 
      break; 
     case '!': 
      System.out.println("The answer is "); //factorial 
      break; 
     case 'n': 
      System.out.println("The answer is "); //previous answer 
      break; 
    } 
} 
+0

Вы пробовали что-нибудь по своему усмотрению, или вы просто просите нас ввести код для вас? – nhouser9

+0

Да, код выше - это то, что я пробовал, но вместо того, чтобы просить пользователя ввести только один номер, он все еще запрашивает два –

+0

. В приведенном выше коде вы запрашиваете ввод, а затем, если оператор! вы запрашиваете другой ввод. – nhouser9

ответ

1

Ваше решение, безусловно, будет запрашивать первый ввод дважды. Измените if состояние, как показано ниже:

 if(oper != '!'){ 
    System.out.println("Please enter the second number"); 
num2 = in.nextInt(); 
System.out.println("The second number is " + num2); 
      } 

Нет еще нужно здесь.

+0

Этот код не сработал для меня –

+0

Это не возможно, это определенно сработает. Вы, должно быть, ошибаетесь. –

+0

Он больше не запрашивает первый вход, но он все еще запрашивает как первое число, так и второе число, и мне нужно только первое число –

0

правильный фрагмент кода:

System.out.println("Please enter operator"); 
oper = in.nextLine().charAt(0); 
System.out.println("The operator is " + oper); 
if (oper =='!'){ 

    System.out.println("Please enter the number"); 
     num1 = in.nextInt(); 
    System.out.println("The first number is " + num1); 
} 
else { 
    System.out.println("Please enter the first number"); 
    num1 = in.nextInt(); 
    System.out.println("The first number is " + num1); 
    System.out.println("Please enter the second number"); 
    num2 = in.nextInt(); 
    System.out.println("The second number is " + num2); 
} 
0

Этот код является проблемой:

System.out.println("Please enter the first number");  //you ask for 1st num 
num1 = in.nextInt(); 
System.out.println("The first number is " + num1); 

if (oper == '!') 
{ 
    System.out.println("Please enter the first number"); //you ask for 1st num again 
    num1 = in.nextInt(); 
    System.out.println("The first number is " + num1); 
} else { 
    System.out.println("Please enter the second number"); 
    num2 = in.nextInt(); 
    System.out.println("The second number is " + num2); 
} 

Просто посмотрите на то, что он делает. В нем говорится: «Пожалуйста, введите первый номер», затем, если оператор «!», Он снова произнесет «Пожалуйста, введите первый номер». Это явно неверно. Вы не должны запрашивать у пользователя первое число, если оператор «!». Изменить на:

System.out.println("Please enter the first number"); 
num1 = in.nextInt(); 
System.out.println("The first number is " + num1); 

if (oper != '!') { 
    System.out.println("Please enter the second number"); 
    num2 = in.nextInt(); 
    System.out.println("The second number is " + num2); 
} 

Это удалит второй запрос для первого номера, когда оператор «!».

+0

Да, спасибо, что это удалило второй запрос для первого номера ' –

+0

@KatieKeenan. Добро пожаловать. Пожалуйста, не забудьте упрекнуть и принять, так как это решило проблему =] – nhouser9

+0

Он больше не запрашивает первый ввод дважды, но он все еще запрашивает как первое число, так и второе число, и мне нужно только первое число –

0

Вот исправленная версия вашей программы, которая должна работать:

package com.example; 

import java.io.IOException; 
import java.util.Scanner; 

class Main { 

    public static void main(String[] args) throws IOException { 

     Scanner in; 
     in = new Scanner(System.in); 

     char oper; 
     int num1 = 0; 
     int num2 = 0; 

     System.out.println("Please enter operator"); 
     oper = in.nextLine().charAt(0); 
     System.out.println("The operator is " + oper); 

     System.out.println("Please enter the first number"); 
     num1 = in.nextInt(); 
     System.out.println("The first number is " + num1); 

     if (oper !='!') { 
      System.out.println("Please enter the second number"); 
      num2 = in.nextInt(); 
      System.out.println("The second number is " + num2); 
     } 

     switch (oper) { 

      case '+': 
       System.out.println("The answer is " + (num1 + num2));//addition 
       break; 
      case '-': 
       System.out.println("The answer is " + (num1 - num2));//subtraction 
       break; 
      case '*': 
       System.out.println("The answer is " + (num1 * num2));//multiplication 
       break; 
      case '/': 
       System.out.println("The answer is " + (num1/num2));//division 
       break; 
      case '%': 
       System.out.println("The answer is " + (num1 % num2));//remainder 
       break; 
      case 'p': 
       System.out.println("The answer is " + Math.pow(num1,num2));//exponent 
       break; 
      case '!': 
       System.out.println("The answer is " + factorial(num1)); //factorial 
       break; 
      case 'n': 
       System.out.println("The answer is "); //previous answer 
       break; 
     } 
    } 

    // from http://stackoverflow.com/a/7879559/1549950 
    private static int factorial(int n) { 
     int fact = 1; 
     for (int i = 1; i <= n; i++) { 
      fact *= i; 
     } 
     return fact; 
    } 

} 

Я также добавил реализацию функции факториала, так как кажется, нет готовых к использованию функции для этого в Math класс.

Поскольку ваш вопрос, как представляется, происходит из какой-либо домашней работы, я настоятельно рекомендую вам начать использовать другие «методы решения», чем просить людей на этом форуме выполнять вашу работу. Это может помочь вам на некоторое время, но не даст вам сдавать экзамены ... Есть отличные (бесплатные) книги в Интернете, чтобы выучить Java - не спешите и изучайте Java - все остальное - пустая трата времени в долгосрочной перспективе!