2013-04-12 151 views
1

我有這種格式的用戶輸入分數問題(4/8-3/12或3 + 2/3或12/16 * 4或-2/3/64/96),並且需要將這兩個分數分成一個數組,然後我需要拉兩個分子和分母,這樣我就可以在其他文件中簡化它們並進行所需的任何計算,所以我需要使用一個數組,以便我可以調用有符號的元素。需要幫助將字符串輸入拆分爲int

System.out.println("Enter Fraction:"); 
String answer = s.nextLine(); 


String[] numbers = answer.split(" "); 
System.out.print(numbers); 

有沒有辦法將數組拆分爲int變量?我搞不清楚了。解決方案可能很簡單,但現在已經在這個項目上工作了7個小時左右。

回答

1

可以將輸入用一個簡單的正則表達式分裂,這樣的:

Pattern p = Pattern.compile("\\d+|[+-/*]"); 
String inp = "2/3/64/96"; 
Matcher m = p.matcher(inp); 
while (m.find()) { 
    System.out.println(m.group()); 
} 

這種解決方案的心臟是一個正則表達式:

\\d+|[+-/*] 

\\d+意味着「一個或多個數字; [+-/*]的意思是「+,-,/*」中的任何一個「。

這裏是demo on ideone

請注意,你的程序將需要非常小心有關決定是否有一個+-是一元「變徵」或二進制操作:當符號是在開始或剛剛之後另一家運營商,它的一元;否則,它是二元的。

+0

這解決了它,並感謝鏈接! –

0

Eric Lippert在處理這些問題時有最好的建議。

用英文/僞代碼寫出問題,然後開始將僞代碼更改爲真實代碼。

Get Answer from user 
Break Answer up to the 2 fractions/numbers and the math operator 
Take the 2 different fractions and convert them to a double, float, whatever you need 
Apply the math operation to the 2 numbers from the above step 
Output the answer 

現在開始更換每條線,你將如何做到這一點。我相信你大概可以找出每一步,但有時我們在整體考慮問題時會迷失方向。如果您無法弄清楚單個步驟,請發佈您嘗試過的代碼,我們可以幫助解決特定的問題。

+0

我寧願不將它們轉換爲雙精度或浮點數,因爲我正在尋找分數可以採用的最小形式和分數和答案。 –

+0

因此,爲什麼我添加了「無論你需要什麼」一節,雙/浮動只是一個建議。 – Zipper

0

到目前爲止,您的代碼只是將輸入拆分爲表達式。你仍然需要將表達式拆分成分數。

當你已經有分數的String數組,可以將每個元素拆分成2個整數:

  1. 拆分成子串與split("/")

  2. 轉換每個子字符串Integer.parseInt()爲int方法。