2015-07-12 2 views
0

Когда я запускаю свой код, он работает до тех пор, пока не задаст вопрос «какую операцию вы хотите использовать (сумма, суб, мульти, div)». Независимо от того, что пользователь выбирает, от моей программы нет ответа!что с этим очень простым кодом

Почему это происходит?

import java.util.Scanner; 
import java.io.*; 

public class three3 { 
    public static void main (String[] args) { 
     int x; 
     int y; 
     int opera; 
     String oper; 

     Scanner in = new Scanner (System.in); 
     System.out.println(" write the first number "); 
     x = in.nextInt(); 

     System.out.println(" write the second number "); 
     y = in.nextInt(); 

     System.out.println(" which operation do you want to use from (sum , subst , multi , div)"); 
     oper = in.nextLine(); 

     if (oper == "sum") { 
      opera=x+y; 
      System.out.println(" the sum of two numbers is " + opera); 
     } 

     if (oper == "subst") { 
      opera = x - y; 
      System.out.println(" the subtraction of two numbers is " + opera); 
     } 

     if (oper == "multi") { 
      opera = x * y; 
      System.out.println(" the multi of two numbers is " + opera); 
     } 

     if (oper == "div") { 
      opera = x/y; 
      System.out.println(" the division of two numbers is " + opera); 
     } 
    } 
} 

ответ

3

Поскольку ни одно из этих if-clauses не выполняется. Вы сравниваете Strings с ==, что не так. Вместо этого используйте oper.equals("sum"). См. this question для справки. Вывод заключается в том, чтобы всегда использовать equals для Strings.

+1

Это неправильный ответ – gurghet

+1

@gurghet Я пропустил ошибку в ответе Хуана, но точка, которую я адресую, тем не менее является причиной неожиданного поведения. – runDOSrun

+0

нет * неправильный * отклик. есть * нет * ответ – gurghet

0

Добавляя к точкам зрения других людей, вы также должны рассмотреть операторы else if{} и else{}, чтобы вы могли поймать неверный ввод.

2

Необходимо позвонить по телефону in.nextLine() сразу после последнего звонка на in.nextInt() Причина в том, что просто запрос следующего целого не потребляет всю строку от ввода, и поэтому вам нужно перейти к следующему символу новой строки на входе, вызывая in.nextLine().

int y = in.nextInt(); 
in.nextLine(); 

Это в значительной степени должно быть сделано каждый раз, когда вам нужно, чтобы получить новую строку после вызова метода, который не потребляет всю линию, например, при вызове nextBoolean() и т.д.

В дополнение , вы не проверяете равенство строк с оператором ==, вместо этого используйте метод String .equals().

+0

это правильный ответ – gurghet

1

Проблема заключается в том, что in.nextLine() потребляет \ n, введенный неявно, когда вы нажимали кнопку enter после ввода int. Это означает, что программа не ожидает от пользователя другого ввода. Чтобы исправить это, вы могли бы потреблять новую строку с in.nextLine(), прежде чем положить его ИНТ действительным переменный, что-то вроде этого:

System.out.println(" write the second number "); 
y=in.nextInt(); 

System.out.println(" which operation do you want to use from (sum , subst , multi , div)"); 

in.nextLine(); //New line consuming the \n 

oper=in.nextLine(); 

if(oper.equals("sum")){//replace == by .equals 
    opera=x+y; 
} 

Помимо этого, и, как сказал runDOSrun, вы должны заменить сравнение строк из a==b в a.equals(b)

+0

это тоже правильно – gurghet

Смежные вопросы