我目前的目标是解析分数并创建不正确的分数。 例如:
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";
}
}
}
答案 0 :(得分:0)
我会说你肯定是在正确的轨道上,虽然我会考虑一些不同的解析方法。
我会按字符解析字符串。遍历字符串,如果当前字符是数字,则将其附加到名为“currentNumber”的StringBuffer或其他内容。如果您当前的角色不是数字,您需要决定做什么。如果它是下划线,您知道currentNumber变量中的值是整数部分。然后,您可以将其存储在单独的变量中并清除currentNumber缓冲区。如果当前字符是斜杠字符,则表示currentNumber中的值是分数的分子。如果当前字符是空格字符,您可以忽略它。如果它是'+'或' - ',您将知道currentHumber变量中的内容是分数分母。然后,您还应将符号存储在单独的变量中作为“运算符”。有很多方法可以实现这一点。例如,你可以有这样的逻辑:“如果我的分子中有一个有效值,而不是我的分母,而我目前看到的字符不是有效的数字字符,那么我在分母中附加了所有数字因此,它应该包含我的分母。因此,将currentNumber中的值放入我的分母变量中,然后转到下一个字符“。
我希望我在这里没有完全失去你...但当然这对你需要做的事情来说可能有点过于先进。例如,您没有指定输入字符串的格式,它是否始终与您提到的格式完全相同,或者它看起来不同?整数部分可以有两位数还是可以一共跳过?
我上面描述的方法被称为有限状态机,如果您还没有了解它们,那么如果您使用这种技术提交作业,您的老师可能会留下深刻的印象。 FSM上有很多阅读材料,所以谷歌是你的朋友。
但是要清楚。你的解决方案看起来也会起作用,它可能不会像“动态”一样。