如何使用一段时间来连续要求用户的输入,并在“退出”时退出程序没有使用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()?
问题描述
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屋!