如何使用一段时间来连续要求用户的输入,并在“退出”时退出程序没有使用system.exit()键入? [英] How can I use a while to continuously ask for input from a user and exit the program when "quit" is typed without using system.exit()?

查看:171
本文介绍了如何使用一段时间来连续要求用户的输入,并在“退出”时退出程序没有使用system.exit()键入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在我的学校接受AP计算机科学课程,我的一个项目遇到了麻烦。该项目需要我创建一个可以评估一个表达式然后解决它的计算器。我有这么多的东西,但我遇到了一点麻烦,因为我的老师要求我使用一个循环来不断地要求输入和显示答案,我被困在那里。要结束程序,用户必须键入quit,我不能使用 system.exit()或任何这样的作弊的事情,程序必须运行代码不足有没有人有任何提示?

  import java.util。*; 

public class Calculator {
public static void main(String [] args){
System.out.println(Welcome to the AP Computer Science calculator !!);
System.out.println();
System.out.println(请在您的表达式中使用以下格式:(double)(space)(+, - ,*,/ ...)(space)(double));
System.out.println(or:(symbol)(space)(double));
System.out.println();
next();
}

public static void next(){
Scanner kb = new Scanner(System.in);
System.out.print(输入一个表达式,或退出退出:);
String expression = kb.nextLine();
next3(expression);
}

public static void next3(String expression){
while(!expression.equals(quit)){
next2(expression);
next();
}
}

public static void next2(String expression){
if(OperatorFor2OperandExpressions(expression).equals(+)){
System.out.println(FirstOperandFor2OperandExpressions(expression)++ OperatorFor2OperandExpressions(expression)++ SecondOperandFor2OperandExpressions(expression)+=+(FirstOperandForOperandExpressions(expression)+ SecondOperandFor2OperandExpressions(expression)))
}
else if(OperatorForOperandExpressions(expression).equals(*)){
System.out.println(FirstOperandForOperandExpressions(expression)++ OperatorFor2OperandExpressions(expression)+ + SecondOperandFor2OperandExpressions(expression)+=+(FirstOperandFor2OperandExpressions(expression)* SecondOperandFor2OperandExpressions(expression)));
}
else if(OperatorForOperandExpressions(expression).equals( - )){
System.out.println(FirstOperandForOperandExpressions(expression)++ OperatorFor2OperandExpressions(expression)+ + SecondOperandFor2OperandExpressions(expression)+=+(FirstOperandFor2OperandExpressions(expression) - SecondOperandFor2OperandExpressions(expression)));
}
else if(OperatorFor2OperandExpressions(expression).equals(/)){
System.out.println(FirstOperandForOperandExpressions(expression)++ OperatorFor2OperandExpressions(expression)+ + SecondOperandFor2OperandExpressions(expression)+=+(FirstOperandFor2OperandExpressions(expression)/ SecondOperandFor2OperandExpressions(expression)));
}
else if(OperatorForOperandExpressions(expression).equals(^)){
System.out.println(FirstOperandForOperandExpressions(expression)++ OperatorFor2OperandExpressions(expression)+ + SecondOperandFor2OperandExpressions(expression)+=+ Math.pow(FirstOperandFor2OperandExpressions(expression),SecondOperandFor2OperandExpressions(expression)));
}
else if(OperatorFor1OperandExpressions(expression).equals(|)){
System.out.println(OperatorFor1OperandExpressions(expression)++ OperandFor1OperatorExpressions(expression)+= + Math.abs(OperandFor1OperatorExpressions(expression)));
}
else if(OperatorFor1OperandExpressions(expression).equals(v)){
System.out.println(OperatorFor1OperandExpressions(expression)++ OperandFor1OperatorExpressions(expression)+= + Math.sqrt(OperandFor1OperatorExpressions(expression)));
}
else if(OperatorFor1OperandExpressions(expression).equals(〜)){
double x = 0.0;
System.out.println(OperatorFor1OperandExpressions(expression)++ OperandFor1OperatorExpressions(expression)+=+(Math.round(OperandFor1OperatorExpressions(expression))+ x));
}
else if(OperatorFor1OperandExpressions(expression).equals(s)){
System.out.println(OperatorFor1OperandExpressions(expression)++ OperandFor1OperatorExpressions(expression)+= + Math.sin(OperandFor1OperatorExpressions(expression)));
}
else if(OperatorFor1OperandExpressions(expression).equals(c)){
System.out.println(OperatorFor1OperandExpressions(expression)++ OperandFor1OperatorExpressions(expression)+= + Math.cos(OperandFor1OperatorExpressions(expression)));
}
else if(OperatorFor1OperandExpressions(expression).equals(t)){
System.out.println(OperatorFor1OperandExpressions(expression)++ OperandFor1OperatorExpressions(expression)+= + Math.tan(OperandFor1OperatorExpressions(expression)));
}
}

public static double FirstOperandFor2OperandExpressions(String expression){
String [] tokens = expression.split();
String OperandOrOperator = tokens [0];
double y = Double.parseDouble(OperandOrOperator);
return y;
}
public static double SecondOperandFor2OperandExpressions(String expression){
String [] tokens = expression.split();
String OperandOrOperator = tokens [2];
double y = Double.parseDouble(OperandOrOperator);
return y;
}
public static String OperatorFor2OperandExpressions(String expression){
String [] tokens = expression.split();
String OperandOrOperator = tokens [1];
return OperandOrOperator;
}
public static String OperatorFor1OperandExpressions(String expression){
String [] tokens = expression.split();
String OperandOrOperator = tokens [0];
return OperandOrOperator;
}
public static double OperandFor1OperatorExpressions(String expression){
String [] tokens = expression.split();
String OperandOrOperator = tokens [1];
double y = Double.parseDouble(OperandOrOperator);
return y;
}
public static boolean QuitFunction(String expression){
if(expression.equalsIgnoreCase(quit)){
System.out.println(Goodbye!);
返回false;

}
else {
return true;
}
}
}


解决方案

看看这段代码。我认为这可能会帮助你走向正确的方向。它类似于你已经写过的内容,除了它消除了在循环中的方法调用的需要。

 扫描仪输入=新的扫描仪(System.in); 

while(!input.hasNext(quit)){

String expression = input.nextLine(); //从Scanner
next2(expression)获取下一行; //处理输入

}
//一旦输入了值quit,while循环终止
System.out.println(Goodbye);

以这种方式编写,彻底清理代码,并阻止新的每次处理输入时,扫描仪kb = new Scanner(System.in);


I am currently taking an AP Computer Science class in my school and I ran into a little trouble with one of my projects! The project requires me to create a calculator that can evaluate an expression and then solve it. I have got most of that down, but I ran into a little trouble because my teacher asked me to use a while loop to continuously ask for input and display the answer, and I am stuck on that. To end the program the user has to type in "quit" and I can't use system.exit() or any cheating thing like that, the program has to just run out of code. Does anyone have any tips?

import java.util.*;

public class Calculator {
   public static void main(String[] args) {
      System.out.println("Welcome to the AP Computer Science calculator!!");
      System.out.println();
      System.out.println("Please use the following format in your expressions: (double)(space)(+,-,*,/...)(space)(double)");
      System.out.println("or: (symbol)(space)(double)");
      System.out.println();
      next();
   }

   public static void next() {
      Scanner kb = new Scanner(System.in);
      System.out.print("Enter an expression, or quit to exit: ");
      String expression = kb.nextLine();
      next3(expression);
   }

   public static void next3(String expression) {   
      while (!expression.equals("quit")) {
         next2(expression);
         next();
      }  
   }

   public static void next2(String expression) {
      if (OperatorFor2OperandExpressions(expression).equals("+")) {
         System.out.println(FirstOperandFor2OperandExpressions(expression) + " " + OperatorFor2OperandExpressions(expression) + " " + SecondOperandFor2OperandExpressions(expression) + " = " + (FirstOperandFor2OperandExpressions(expression) + SecondOperandFor2OperandExpressions(expression)));          
      }
      else if (OperatorFor2OperandExpressions(expression).equals("*")) {
         System.out.println(FirstOperandFor2OperandExpressions(expression) + " " + OperatorFor2OperandExpressions(expression) + " "  + SecondOperandFor2OperandExpressions(expression) + " = " + (FirstOperandFor2OperandExpressions(expression) * SecondOperandFor2OperandExpressions(expression)));
      }
      else if (OperatorFor2OperandExpressions(expression).equals("-")) {
         System.out.println(FirstOperandFor2OperandExpressions(expression) + " " + OperatorFor2OperandExpressions(expression) + " " + SecondOperandFor2OperandExpressions(expression) + " = " + (FirstOperandFor2OperandExpressions(expression) - SecondOperandFor2OperandExpressions(expression)));       
      }
      else if (OperatorFor2OperandExpressions(expression).equals("/")) {
         System.out.println(FirstOperandFor2OperandExpressions(expression) + " " + OperatorFor2OperandExpressions(expression) + " "  + SecondOperandFor2OperandExpressions(expression) + " = " + (FirstOperandFor2OperandExpressions(expression) / SecondOperandFor2OperandExpressions(expression)));
      }
      else if (OperatorFor2OperandExpressions(expression).equals("^")) {
         System.out.println(FirstOperandFor2OperandExpressions(expression) + " " + OperatorFor2OperandExpressions(expression) + " " + SecondOperandFor2OperandExpressions(expression) + " = " + Math.pow(FirstOperandFor2OperandExpressions(expression),SecondOperandFor2OperandExpressions(expression)));
      }
      else if (OperatorFor1OperandExpressions(expression).equals("|")) {
         System.out.println(OperatorFor1OperandExpressions(expression) + " " + OperandFor1OperatorExpressions(expression) + " = " + Math.abs(OperandFor1OperatorExpressions(expression)));
      }
      else if (OperatorFor1OperandExpressions(expression).equals("v")) {
         System.out.println(OperatorFor1OperandExpressions(expression) + " " + OperandFor1OperatorExpressions(expression) + " = " + Math.sqrt(OperandFor1OperatorExpressions(expression)));
      }
      else if (OperatorFor1OperandExpressions(expression).equals("~")) {
         double x = 0.0;
         System.out.println(OperatorFor1OperandExpressions(expression) + " " + OperandFor1OperatorExpressions(expression) + " = " + (Math.round(OperandFor1OperatorExpressions(expression))+ x));
      }
      else if (OperatorFor1OperandExpressions(expression).equals("s")) {
         System.out.println(OperatorFor1OperandExpressions(expression) + " " + OperandFor1OperatorExpressions(expression) + " = " + Math.sin(OperandFor1OperatorExpressions(expression)));
      }
      else if (OperatorFor1OperandExpressions(expression).equals("c")) {
         System.out.println(OperatorFor1OperandExpressions(expression) + " " + OperandFor1OperatorExpressions(expression) + " = " + Math.cos(OperandFor1OperatorExpressions(expression)));
      }
      else if (OperatorFor1OperandExpressions(expression).equals("t")) {
         System.out.println(OperatorFor1OperandExpressions(expression) + " " + OperandFor1OperatorExpressions(expression) + " = " + Math.tan(OperandFor1OperatorExpressions(expression))); 
      } 
   }

      public static double FirstOperandFor2OperandExpressions(String expression) {
         String[] tokens = expression.split(" ");
         String OperandOrOperator = tokens[0];
         double y = Double.parseDouble(OperandOrOperator);
         return y;         
   }
      public static double SecondOperandFor2OperandExpressions(String expression) {
         String[] tokens = expression.split(" ");
         String OperandOrOperator = tokens[2];
         double y = Double.parseDouble(OperandOrOperator);
         return y;
   }
       public static String OperatorFor2OperandExpressions(String expression) {
         String[] tokens = expression.split(" ");
         String OperandOrOperator = tokens[1];
         return OperandOrOperator;
   }
      public static String OperatorFor1OperandExpressions(String expression) {
         String[] tokens = expression.split(" ");
         String OperandOrOperator = tokens[0];
         return OperandOrOperator; 
   }
      public static double OperandFor1OperatorExpressions(String expression) {
         String[] tokens = expression.split(" ");
         String OperandOrOperator = tokens[1];
         double y = Double.parseDouble(OperandOrOperator);
         return y;  
   }
      public static boolean QuitFunction(String expression) {
         if (expression.equalsIgnoreCase("quit")) {
            System.out.println("Goodbye!");
            return false;

         }
         else {
            return true;
         }
      }           
}

解决方案

Take a look at this code. I think this might help you in the right direction. It's similar to what you have already written except it eliminates the need for method calls in your while loop.

Scanner input = new Scanner(System.in);

while (!input.hasNext("quit")) {

    String expression = input.nextLine(); // gets the next line from the Scanner
    next2(expression); // process the input

}
// once the value "quit" has been entered, the while loop terminates
System.out.println("Goodbye");

Writing it this way drastically cleans up your code and prevents a new declaration of Scanner kb = new Scanner(System.in); each time an input is processed.

这篇关于如何使用一段时间来连续要求用户的输入,并在“退出”时退出程序没有使用system.exit()键入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆