2015-04-15 1 views
0

Я пытаюсь сделать программу калькулятора с петлевым переключателем.Как продолжать запрашивать пользователя, пока не решит завершить программу?

double firstNum, secondNum; 
    int operation; 
    Scanner keyboard = new Scanner(System.in); 

    System.out.print("Please enter the first number: "); 
    firstNum = keyboard.nextDouble(); 
    System.out.print("\n"); 

    System.out.print("Please enter the second number: "); 
    secondNum = keyboard.nextDouble(); 
    System.out.print("\n"); 

    System.out.println("Press 1 for addition"); 
    System.out.println("Press 2 for subtraction"); 
    System.out.println("Press 3 for multiplication"); 
    System.out.println("Press 4 for division"); 
    System.out.println("Press 0 to end the program"); 
    System.out.println("\n"); 

    System.out.print("Which operation would you like to perform? "); 
    operation = keyboard.nextInt(); 
    System.out.print("\n"); 


    switch (operation) 
    { 
     case 1: 
      System.out.println(firstNum + " + " + secondNum + " = " + (firstNum + secondNum)); 
      break; 
     case 2: 
      System.out.println(firstNum + " - " + secondNum + " = " + (firstNum - secondNum)); 
      break; 
     case 3: 
      System.out.println(firstNum + " * " + secondNum + " = " + (firstNum * secondNum)); 
      break; 
     case 4: 
      if (secondNum ==0) 
        { 
         System.out.println("You can't divide by zero."); 
        } 
        else 
        { 
         System.out.println(firstNum + "/" + secondNum + " = " + (firstNum/secondNum)); 

        } 
      break; 
     default: 
      System.out.println("You have pressed 0. The program is now over."); 
    } 

Итак, у меня есть это. Он отлично работает, если пользователь просто хочет рассчитать одну вещь. Тем не менее, я хочу сделать так, чтобы после того, как они получили свой первый ответ, им снова будет предложено ввести операцию (так что цикл программы начинается с «Какую операцию вы хотите выполнить?»). Я хочу, чтобы цикл продолжался до тех пор, пока они не нажмут 0.

Как бы я это сделал? Я новичок в циклах.

Спасибо за помощь.

ответ

0

Вам нужно использовать цикл while, из которого вы выходите из цикла while, когда будете готовы к выходу. Имейте в виду, что любой перерыв внутри вашего оператора switch будет применяться к коммутатору, а не циклу while, поэтому вам может потребоваться сохранить отдельную переменную, не выходя из цикла.

Например:

boolean continue = true; 

while(continue) { 
    System.out.print("Which operation would you like to perform? "); 
    operation = keyboard.nextInt(); 
    System.out.print("\n"); 

    switch (operation) 
    { 
     case 1: 
      System.out.println(firstNum + " + " + secondNum + " = " + (firstNum + secondNum)); 
      break; 
     case 2: 
      System.out.println(firstNum + " - " + secondNum + " = " + (firstNum - secondNum)); 
      break; 
     case 3: 
      System.out.println(firstNum + " * " + secondNum + " = " + (firstNum * secondNum)); 
      break; 
     case 4: 
      if (secondNum ==0) 
        { 
         System.out.println("You can't divide by zero."); 
        } 
        else 
        { 
         System.out.println(firstNum + "/" + secondNum + " = " + (firstNum/secondNum)); 

        } 
      break; 
     default: 
      System.out.println("You have pressed 0. The program is now over."); 
      continue = false; 
      break; 
    } 
} 

Это звучит как проблема домашних заданий, так что потратить некоторое время на понимание в то время как против для петель, и т.д., и не просто принять этот ответ, и бежать с ним.

+0

Имейте в виду, вы, возможно, придется поставить время цикла на другом уровне, в зависимости от того, где вы собираетесь их, чтобы иметь возможность выйти или, если вы собираетесь их быть способный выбирать разные номера без выхода из программы. – JBzd

0

Наилучшим решением является петля do-while как действия, которые вы хотите гарантированно произойдет, по крайней мере один раз

do 
{ 
    System.out.println("What operation would you like to preform?"); 
    //do math calculating stuff 
    System.out.println("Would you like to do another calculation?"); 
} 

while(scannerScan.nextInt != 0); 

Когда вы пишете do часть, положить все, что вы хотите выполнить несколько раз внутри do скобки , В этом случае я помещал SOP и комментировал в скобки, поэтому, пока nextInt() != 0 SOP будут продолжать печатать. Это немного легче читать и отменяет любые беспорядки в вашей программе, которые могут привести к сбою другого типа цикла, гарантируя, что ваша программа будет запускаться хотя бы один раз. После этого, если это не удается, вы точно знаете, где вы перепутались, прямо в конце, где находится условие while.

EDIT

Я проверил по наведению продолжения, в случае, если по умолчанию, и он должен работать для вас. Это означает, что если пользователь вводит значение, которое неприемлемо, выполняется по умолчанию, и он будет выполнять оператор continue, который переходит прямо в состояние while. Поэтому я предлагаю вам перестроить ваше дело по умолчанию, как например:

do 
{ 
    int x = 0; 

    switch(x) 
    { 
     case 1: 
      System.out.println("Math ops."); 
      break; 
     case 2: 
      //wonderful math 
      break; 
     case 3: 
      //wonders of code 
      break; 
     default: 
      System.out.println("You entered invalid input. Try again. Enter a non-zero number to continue."); 
      continue; 
    } 
} 

while(scannerScan.nextInt() != 0); 
+0

SOP, который говорит, что пользователь, у которого есть выход, должен находиться в одной из строк ПОСЛЕ состояния while в моем примере, на самом деле, просто избавиться от SOP в случае по умолчанию и сделать что-то еще или избавиться от него , Хотя рекомендуется всегда иметь случай по умолчанию для обработки ошибок или неожиданного ввода, я думаю, что в этом случае вам это действительно не понадобится, конечно, вы всегда можете оставить 'continue' там и выйти из коммутатора обратно в цикл, хотя я не уверен, что это сработает. Я никогда не использовал 'continue' в инструкции switch. – Ungeheuer

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