2014-11-07 65 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