2015-04-13 2 views
3

Я новичок в java, и я работал над этим как немного совершенным. Предполагается, что это простой калькулятор. Я знаю, что есть, вероятно, лучшие/более эффективные способы сделать это, но это не то, что я ищу. Я столкнулся с небольшой проблемой при использовании switch, чтобы выбрать, какая операция будет запущена. В основном, каждый раз, когда я запускаю код, он выбирает правильный код для запуска (если введенный String «+», он добавит double s), как всегда ему всегда кажется, что он запускает код default (который печатает «Команда не распознана».). Если я удалю код default, он отлично работает (конечно, если пользователь вводит неизвестную команду, он даст ошибку), и я мог бы легко это сделать, но то, что я действительно хочу, - это способ иметь код по умолчанию и знать, почему он не работает таким образом. Пожалуйста, помогите. Спасибо.Java-переключатель всегда запускает код по умолчанию

import java.util.Scanner; 
public class App { 
public static void main(String[] args){ 
    Scanner scan = new Scanner(System.in); 
    double v1 = scan.nextDouble(); 
    double v2; 
    double v3; 
    scan.nextLine(); 
    while(1<2){ 
    String op = scan.nextLine(); 
    switch(op){ 
    case "+": 
     v2 = scan.nextDouble(); 
     v1 = v2 + v1; 
     System.out.println("="+v1); 
     break; 
    case "-": 
     v2 = scan.nextDouble(); 
     v1 = v2 - v1; 
     System.out.println("="+v1); 
     break; 
    case "*": 
     v2 = scan.nextDouble(); 
     v1 = v2 * v1; 
     System.out.println("="+v1); 
     break; 
    case "/": 
     v2 = scan.nextDouble(); 
     v1 = v1/v2; 
     System.out.println("="+v1); 
     break; 
    case "^": 
     v2 = scan.nextDouble(); 
     v3 = v1; 
     for(int i = 1;i<v2;i++){ 
      v1 = v1*v3; 
     } 
     System.out.println("="+v1); 
     break; 
    case "%": 
     v2 = scan.nextDouble(); 
     v1 = (v1/100)*v2; 
     System.out.println("="+v1); 
     break; 
    default: 
     System.out.println("Command not recognized."); 
      } 
     } 
    } 
} 

Выход есть что-то вроде этого:

5 
* 
5 
=25.0 
Command not recognized. 
+0

Можете ли вы опубликовать ввод, также согласованный с выходом? –

+0

Входные данные были первыми тремя строками в консоли (5, *, 5). Фактический вывод, напечатанный программой art последние два. –

+0

. Что вы здесь пытаетесь: 'while (1 <2) {'? – Bubletan

ответ

2

Вы должны использовать scan.next() вместо scan.nextLine() в этой строке:

String op = scan.next(); 

Когда вы scan.nextLine() он потребляет символ новой строки, поэтому op получает значение «новая строка», а switch заканчивается по умолчанию.

Использование scan.next() вы будете в состоянии сделать это:

5 
* 
5 
=25.0 
* 
2 
=50.0 
/
25 
=2.0 
+0

Это сработало! благодаря :) –

1

добавить break; после System.out.println("Command not recognized.");

Чтобы исправить это просто выйти из цикла.

default: 
      System.out.println("Command not recognized."); 
      break; 
       } 
     break; 
      } 

Поскольку ваш цикл while никогда не заканчивается, он будет продолжать повторять код.

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