2014-02-01 2 views
-2

Я хочу попросить пользователя вставить оператор и получить ответ, пока пользователь не вводит ключи, отличные от +, -, * или \. Я сделал такую ​​программу, как это. Но она не будет работать должным образом . Он зацикливается даже на другие клавиши. В чем проблема с кодированием?Хотя loop dosnt работает правильно в моей программе

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

    InputStreamReader myrdr=new InputStreamReader(System.in); 
    BufferedReader myBfr=new BufferedReader(myrdr); 
    Scanner myScanner=new Scanner(System.in); 

    String mathOp; 
    float Res,Num1,Num2; 


    System.out.print("Mathematical Operator :"); 
    mathOp=myBfr.readLine(); 




    Res=0; 
    while(mathOp!="+"||mathOp!="-"||mathOp!="*"||mathOp!="\\") 
    { 
     System.out.print("Enter number one: "); 
     Num1=myScanner.nextInt(); 

     System.out.print("Enter Number Two: "); 
     Num2=myScanner.nextInt(); 

     switch(mathOp) 
     { 
      case "+": 
       Res=Num1+Num2; 
       break; 

      case "-": 
       Res=Num1-Num2; 
       break; 
      case "\\": 
       Res=Num1/Num2; 
       break; 
      case "*": 
       Res=Num1*Num2; 
       break; 

      default: 
      { 
       System.out.println("Programme Exits"); 
       return; 
      } 
     } 

     System.out.println("Answer is : "+Res); 
     System.out.print("Mathematical Operator :"); 
     mathOp=myBfr.readLine(); 

    } 



} 
+0

Это должно быть &&, а не || –

+1

Возможный дубликат [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Zavior

+0

Вам нужно понять разницу между И ('&&') и OR ('||'). Вам также нужно научиться сравнивать строки. –

ответ

1

Не используйте == (который сравнивает если 2 операнда является объектом Строки же, что они не являются), используйте equals() (который сравнивает если содержимого объектов 2 Струнных одинаковы) ,

Но еще лучше, упростить код для этого:

while (!"+-*\\".contains(mathOp)) 

Кстати, деление, как правило, нормальный слэш /, а не обратной косой черты \.

+1

Если 'mathOp' является' + ', результат' '+ - * \\". IndexOf ("+") 'будет' 0', потому что есть '+' в первом индексе строки ' "+ - * \\" '. И сравнение этого с помощью '0 <0' приведет к выходу из цикла. Если 'indexOf' не может найти' mathOp' в строке, он вернет '-1', чтобы продолжить цикл. Итак, в конце ... не должно быть условия типа '' + - * \\ ". IndexOf (mathOp)> -1' или лучше' '+ - * \\". Содержит (mathOp) '? – bobbel

+0

Код @bobbel OP проверяется на '! =', Поэтому моя логика была правильной, однако ваше предложение использовать 'contains()' является хорошим, потому что его легче читать, за исключением того, что я изменил его на '! Contains (), чтобы сохранить намерение. – Bohemian

0

Сделайте время цикла, как этот

while(mathOp.equals("+") || mathOp.equals("-") || 
mathOp.equals("//") || mathOp.equals("*")) 

Использование String.equals() сравнить строки в Java, не == или !=. Чтобы объяснить больше, вы не должны использовать == или != при сравнении значений String в Java, потому что они проверяют равенство для значений в правом и левом операндах. то есть адрес памяти в случае объектов String, который не будет равен для двух разных объектов. Вы можете использовать == и != с примитивными типами данных и константами времени компиляции. Существует также концепция, называемая String constant pool, которая имеет константы String для компиляции, созданные с использованием assignment operator, например String new = "new";, без использования оператора new при создании объекта, который можно сравнить с помощью == или !=.

0

Yoy должны использовать как тот коснуться

время ((mathOp.equals ("+")) || (mathOp.equals (! "-")) || (mathOp.equals (»! * ")) || (! mathOp.equals (" \ ")))

0

Прежде всего, вы должны знать правильное использование || и & & True || False возвращает true True || False || False || False возвращает true, одного True достаточно, чтобы условие возвращалось true, независимо от того, сколько ложных у вас есть Итак, в вашем случае вы говорите, что если вход отличается от одного из них, чем позволить ему продолжить, так что если у вас есть + войдет, так как + отличается тем, что -. Вместо этого вы должны использовать & &.

Истинных & & Ложные возвращает Ложные Истинных & & Истинных & & Истинных & & Ложных возвращает значение False. Одного False достаточно, чтобы вернуть False независимо от того, сколько у вас True. Если вы используете & &, вы должны указать условие, чтобы вернуть true, только если все под-условия истинны, то есть оно отличается от + и отличается от - и отличается от * и отличается от.

Кроме того, замените символ «+» на «+», поскольку последний является символом, а первый - строкой. == может использоваться только для символов, чисел и булевых значений. Чтобы сравнить строки, вы должны использовать.равно (x)

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