解析分数

时间:2014-11-07 02:54:24

标签: java eclipse parsing

我目前的目标是解析分数并创建不正确的分数。 例如:

1_1 / 3 + 5/3

应该以

进入控制台

4/3 + 5/3

有人能说我正朝着正确的方向前进吗?我应该关注什么?

import java.util.Scanner;

public class FracCalc {
    public static void main (String[] args) {
        Scanner input = new Scanner(System.in);
            System.out.println("Welcome to FracCalc");
            System.out.println("Type expressions with fractions, and I will evaluate them.");

        boolean isTrue = true;
        String in = "";
        while(isTrue) {
            in = input.nextLine();
            if (in.equals("quit")) {
                System.out.println("Thanks for running FracCalc!");
                isTrue = false;
            }else{
                System.out.println("You asked me to compute" + in);
                }
            }
        }
        public static void parse(String in){
            int underscore = in.indexOf("_");
            int slash = in.lastIndexOf("/");

            String wholenumber = in.substring(0, underscore);
            String numerator = in.substring(underscore + 1,slash);
            String denominator = in.substring(slash + 1);

            if (underscore<0 & slash<0) {
                in = wholenumber;
            } else if (underscore<0 & slash>0) {
                in = in;
            } else if (underscore>0 & slash>0) {

            } else if (underscore>0 & slash<0) {
                in = "Error";
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我会说你肯定是在正确的轨道上,虽然我会考虑一些不同的解析方法。

我会按字符解析字符串。遍历字符串,如果当前字符是数字,则将其附加到名为“currentNumber”的StringBuffer或其他内容。如果您当前的角色不是数字,您需要决定做什么。如果它是下划线,您知道currentNumber变量中的值是整数部分。然后,您可以将其存储在单独的变量中并清除currentNumber缓冲区。如果当前字符是斜杠字符,则表示currentNumber中的值是分数的分子。如果当前字符是空格字符,您可以忽略它。如果它是'+'或' - ',您将知道currentHumber变量中的内容是分数分母。然后,您还应将符号存储在单独的变量中作为“运算符”。有很多方法可以实现这一点。例如,你可以有这样的逻辑:“如果我的分子中有一个有效值,而不是我的分母,而我目前看到的字符不是有效的数字字符,那么我在分母中附加了所有数字因此,它应该包含我的分母。因此,将currentNumber中的值放入我的分母变量中,然后转到下一个字符“。

我希望我在这里没有完全失去你...但当然这对你需要做的事情来说可能有点过于先进。例如,您没有指定输入字符串的格式,它是否始终与您提到的格式完全相同,或者它看起来不同?整数部分可以有两位数还是可以一共跳过?

我上面描述的方法被称为有限状态机,如果您还没有了解它们,那么如果您使用这种技术提交作业,您的老师可能会留下深刻的印象。 FSM上有很多阅读材料,所以谷歌是你的朋友。

但是要清楚。你的解决方案看起来也会起作用,它可能不会像“动态”一样。