2012-12-06 71 views
2

如何掃描以此格式插入的數字:1.7 + 2.8990i in java?我想象它可能用+分割一行,或者 - ?我應該如何將這條線作爲一個字符串或其他東西?如何掃描java中的複數

感謝

+3

http://commons.apache.org/math/userguide/complex.html –

+3

您是否嘗試過編寫自己的解析器?如果是這樣,您能否請您說明您嘗試過的評論以及它爲什麼不起作用?編輯,我喜歡@ JasonSperske可能的解決方案。 –

+0

我到目前爲止: String operator = null; \t \t String Podatki []; \t \t而(操作者= 「izhod」!){ \t \t \t // preberemo操作者 \t \t \t是System.out.print( 「Vtipkaj ukaz(+, - ,*,/,W):」); \t \t \t Scanner scan = new Scanner(System.in); \t \t \t \t operator = scan.nextLine(); \t \t \t // preberemo stevili \t \t \t Podatki =新的String [2]; \t \t \t對(INT I = 0; I user1791473

回答

3

如果你想使用一個庫總有Commons Math它可以讓你做的東西是這樣的:

ComplexFormat cf = new ComplexFormat(); 
Complex c = cf.parse("1.110 + 2.222i"); 
Complex second = new Complex(2.0, 5.0); 
Complex answer = c.log();  // natural logarithm. 
     answer = c.cos();  // cosine 
     answer = c.pow(second); // first raised to the power of second 

ComplexFormat format = new ComplexFormat(); // default format 
String s1 = format.format(c);  // s1 contains "1.110 + 2.222i" 
String s2 = format.format(second); // s2 contains "2.0 + 5.0i" 
1

這裏是一個正則表達式的方法(無外部庫,但還沒有使用的能力複雜數字不僅僅是解析):

Pattern pattern = Pattern.compile("([+-]?\\d*\\.\\d+)([+-]?\\d*\\.\\d+)i",Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 
Matcher matcher = pattern.matcher("1.7+2.8990i"); 
if(matcher.matches()) { 
    System.out.println("a:" + Float.parseFloat(matcher.group(1))); 
    System.out.println("b:" + Float.parseFloat(matcher.group(2))); 
} else { 
    System.out.println("Not a complex number"); 
} 

此方法支持a和b的正值和負值。這種方法的一個弱點是它不能容忍數字周圍的空格(你可以安全地從輸入中去掉空格而不改變方程)。