【问题标题】:How do i save individual inputs in a while loop and print them at the end?如何在 while 循环中保存单个输入并在最后打印它们?
【发布时间】:2016-07-08 04:44:00
【问题描述】:

我正在为我的 java 类制作一个计算器,我们必须在其中输入一个左操作数,从 5 个选项的菜单中选择一个运算符(其中一个要退出),然后选择一个右操作数。它应该不断地从菜单中询问一个运算符和一个右操作数,直到用户选择 5(退出选项)并将“resultSoFar”保存为左操作数,这样它就可以继续下去。

最后,程序应该打印整个总和。因此,例如,最终结果可能看起来像“3 / 4 + 6 - 2 = 不管”(不用考虑数学)。不用担心它不按顺序做,现在还早在课堂上,老师不介意。

我不知道如何让它保存各个输入,以便在最后打印它们。代码如下:

import java.util.Scanner;

public class JavaAssignment5 
{
    public static void main(String[] args)
    {
        Scanner stdIn = new Scanner(System.in);

        String operator = "";
        double leftOp = 0.0;
        double rightOp;
        double resultSoFar = leftOp;


        System.out.print("Please choose the left operand : ");
        leftOp = stdIn.nextDouble();
        System.out.println();

        while (!(operator.equals("1") || operator.equals("2") || operator.equals("3") || operator.equals("4") || operator.equals("5"))) 
        {
            System.out.println("1 -> Multiplication");
            System.out.println("2 -> Division");
            System.out.println("3 -> Addition");
            System.out.println("4 -> Subtraction");
            System.out.println("5 -> Exit");
            System.out.println();

            while (!(operator.equals("1") || operator.equals("2") || operator.equals("3") || operator.equals("4") || operator.equals("5"))) 
            {
            System.out.println("Please choose a operator from the menu above : ");
            String throwAway = stdIn.nextLine();
            operator = stdIn.nextLine();
            }

            System.out.println("Please choose a right operand : ");
            rightOp = stdIn.nextDouble();

            if (operator.equals("1"))
            {
                resultSoFar = leftOp * rightOp;
            }

            if (operator.equals("2"))
            {
                resultSoFar = leftOp / rightOp;
            }

            if (operator.equals("3"))
            {
                resultSoFar = leftOp + rightOp;
            }

            if (operator.equals("4"))
            {
                resultSoFar = leftOp - rightOp;
            }
        }

        System.out.println(resultSoFar);
    }



}

【问题讨论】:

  • 你可以使用ArrayList吗?
  • 不,我们只涵盖了 while、do 和 for 循环。这就是为什么这是如此痛苦的原因。
  • @PaulBoddington 对不起,我没有标记你,新来的网站,我在上面回复了你的评论。
  • 我还是收到了通知。如果您不标记任何人,我认为该网站通过自动通知前一个人来工作。那是一种痛苦。您应该按照答案中的建议使用像ArrayListStringBuilder 这样的可变对象来真正做到这一点。如果不被允许,确实很痛苦。

标签: java input while-loop java.util.scanner calculator


【解决方案1】:

如果您只需要显示最终等式(例如 3 / 4 + 6 - 2),那么您可以在单个 StringBuilder 中构建该字符串。

如果最后需要单独的值和运算符,那么两个 ArrayList 对象就足够了,一个用于值,一个用于运算符。列表非常适合收集未知长度的值,因为与数组不同,它们的大小可以增长。

如果您要实现运算符优先级,则需要构建表达式树,但听起来您还没有。

【讨论】:

  • 我无法使用 ArrayList,我们只涵盖了 for、while 和 do 循环。我认为他想要的是我们将输入保存在单个字符串中,并通过循环不断添加它们。
  • @ZKenn 你可以只用一个字符串来做到这一点,但StringBuilder 专门用于增量构建字符串,因此它更有效。目前,在循环中执行expr = expr + ' ' + operator + ' ' + value 可能没问题,但使用StringBuilder 会更好,以提高性能。
  • 谢谢!我将研究 stringbuilder 以便我可以学习它,或者至少了解将来如何使用它。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 2016-03-18
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
相关资源
最近更新 更多