2014-11-07 46 views
0

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

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

我会说你'.split(“_”)'该字符串和自动双方在一个单一的步骤。 – ChiefTwoPencils 2014-11-07 02:57:14

+0

你的问题是什么? – Tetramputechture 2014-11-07 02:57:46

+0

我们还没有了解.split(“_”)我在搞清楚如何处理if else(下划线> 0和斜线> 0){还有System.out.println( “你问我计算”+ in)我尝试用解析替换,但它不起作用 – 2014-11-07 03:13:50

回答

0

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

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

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

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

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

+0

好吧,从你上面的评论来看,我会说你可能还没有学习FSM,上面的方法将最可能对你来说目前有点太过分了。但它仍然值得思考......并在FSM上稍微阅读一下。这将是值得的。 – StFS 2014-11-07 03:30:27