【问题标题】:RPNCalculator Code ConfusionRPNCalculator 代码混乱
【发布时间】:2013-05-27 22:42:28
【问题描述】:

这是我的第二门编程课,我是 Java 新手。我一直在做我的第一个任务,它涉及类和方法。我对这些话题知之甚少,发现自己迷失了方向。我的作业要求我创建一个 RPN 计算器,要求用户输入两个数字和一个运算符。计算器对这两个数字进行运算,并要求再输入一个数字和一个运算符。然后计算器使用第一组的结果并使用刚刚输入的新数字执行另一次运算。当用户输入一个字母时程序结束。我附上了我的代码(粗略)。我需要与编码一样多的帮助来理解方法。请尽快帮助,我想学习这个。任何帮助表示赞赏。

import java.util.Scanner;

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

        double v1, v2;
        String operator = keyboard.nextLine();
        char symbol = operator.charAt(0);

        System.out.print("Enter a value v1: ");
        v1 = keyboard.nextDouble();
        System.out.println();
        System.out.print("Enter a value v2: ");
        v2 = keyboard.nextDouble();
        System.out.println();
        System.out.print("Enter one of the valid operators +, -, *, /, nCr,:  ");
        operator = keyboard.nextLine();
        switch (symbol)
            {
             case'+':
                sum.writeOutput();
                break;
             case'-':
                minus.writeOutput();
                break;
             case'*':
                times.writeOutput();
                break;
             case'/':
                divide.writeOutput();
                break;
             case'q':
                System.out.println("Your last result was "  );
             default:
                System.out.println("You must choose an appropriate operator .");
             }
    }

    double value1, value2;
    int n;

    public static double sum(double value1,double value2)
    {
        double newSum = value1 + value2;
        return newSum;
    }
    public static double minus(double value1, double value2)
    {
        double newMinus = value1 - value2;
        return newMinus;
    }
    public static double times(double value1, double value2)
    {
        double newTimes = value1 * value2;
        return newTimes;
    }
    public static double divide(double value1, double value2)
    {
        double newDivide = value1 / value2;
        return newDivide;
    }
}

【问题讨论】:

  • 我收到 4 个错误,说明编译器找不到符号。它是附加的。我不知道我是否正确地执行了此操作,以及它是否会给我我所寻求的结果。我应该创建一个带有类描述的单独的 java 文件吗?同样,我是编程新手。 RPNCalc.java:25:错误:找不到符号 sum.writeOutput(); ^
  • 什么是sum.writeOutput();?我看到定义的唯一sum 是一个函数,函数不能有成员,而且我在任何地方都没有看到writeOutput() 函数定义,所以这是两个错误。
  • 我的印象是它是一个命令(方法)将 sum 的值生成到屏幕上。请原谅我粗糙的编程技能,我是新手。
  • 鉴于您对这两个错误的建议,我相信我的代码应该从下面列出的函数中引用 newSum?
  • 您使用任何类型的 IDE 还是使用类似于记事本的东西编写代码?推荐使用 Eclipse 或 Netbeans 来开发你的 javaprojects,开发环境非常好,你会学得更快,因为它会指出你做错的事情。

标签: java class methods


【解决方案1】:

好的。开始了。我稍微修改了你的程序。以下是修改程序时出现的问题。 1.任何类中都没有“writeOutput()方法。因此我不得不删除那段代码。 2. 必须引入一个while 循环来使其成为一个迭代过程。 3. 读取操作符字符串后下移操作符.charAt(0) 方法。

由于您使用的是 switch 语句,因此您无法将运算符值与“nCr”字符串值进行比较。要使用这个,您必须使用 equals() 方法进行字符串比较。

最后但同样重要的是,操作的结果应该是下一轮计算的输入之一。这意味着第一个操作的结果将传递给下一个操作的第一个参数。

import java.util.Scanner;

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

        double v1, v2;
//        String operator = keyboard.nextLine();
//        char symbol = operator.charAt(0);
        char operator = ' ';//First time around, set this to an something other than 'q'
        String operatorString = " ";
        System.out.print("Enter a value v1: ");
        v1 = keyboard.nextDouble();
        System.out.println();
        while(operator != 'q')
        {
            System.out.print("Enter a value v2: ");
            v2 = keyboard.nextDouble();
            System.out.println();
            System.out.print("Enter one of the valid operators +, -, *, /, nCr,:  ");
            operatorString = keyboard.next();//nextLine() doesn't wait until the user hit enter
            operator = operatorString.charAt(0);
            switch (operator)
            {
             case'+':
                v1 = sum(v1, v2);
                System.out.println(v1);
                break;
             case'-':
                v1 = minus(v1, v2);
                System.out.println(v1);
                break;
             case'*':
                v1 = times(v1, v2);
                System.out.println(v1);
                break;
             case'/':
                v1 = divide(v1, v2);
                System.out.println(v1);
                break;
             case'q':
                System.out.println("Your last result was "  );                
             default:
                System.out.println("You must choose an appropriate operator .");
             }
        }
    }

    double value1, value2;
    int n;

    public static double sum(double value1,double value2)
    {
        double newSum = value1 + value2;
        return newSum;
    }
    public static double minus(double value1, double value2)
    {
        double newMinus = value1 - value2;
        return newMinus;
    }
    public static double times(double value1, double value2)
    {
        double newTimes = value1 * value2;
        return newTimes;
    }

    public static double divide(double value1, double value2)
    {
        if (value2 == 0)
        {
            System.out.println("Division by Zero. Try again");
            return value1;
        }
        double newDivide = value1 / value2;
        return newDivide;
    }
}

【讨论】:

  • 虽然我和导师一起解决了这个问题,但我感谢您的帮助。这很容易理解。再次感谢。
【解决方案2】:

您将函数名称视为某个类的对象。这还能编译吗?

您想在用户键入“q”时退出程序。

您从阅读开头的运算符开始。为什么?

您需要将程序的主体包含在一个循环中。

我会为你写几行,但大部分更改留给你作为练习

double result;
System.out.print("Enter the first value");
result = keyboard.nextDouble();
boolean done = false;

while (!done) {
    System.out.println("Enter a value");
    v1 = keyboard.nextDouble();
    System.out.print("Enter one of the valid operators +, -, *, /, nCr,:  ");
    operator = keyboard.nextLine();
    symbol = operator.charAt(0);
    switch (symbol) {
      case '+':
        result = sum(result, v1);
        break;
      ...
      case 'q':
        System.out.println("Your last result was " + result);
        done = true;
        break;
     }
}

【讨论】:

  • 没有文件没有编译,我收到了 4 个错误,都说明 RPNCalc.java:25: 错误:找不到符号 sum.writeOutput(); ^ 符号:变量和位置:RPNCalc 类 ^
  • 对不起,我没有完成我的陈述。我最初有一个完全不同的程序,它包含在 do while 语句中,但被指示更改它。
猜你喜欢
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多