gpt4 book ai didi

java - 在java中解析一个复数

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:10:09 25 4
gpt4 key购买 nike

我是 Java 编程的新手,我正在编写一个“复杂”类,因此我可以了解一些 OOP。

在编写一个read() 方法来获取用户输入的复数时,我遇到了一个问题。目前,用户必须输入 2 个由空格分隔的数字,它们分别是实部和虚部。但如果他们输入“3 + 4i”或“3.23+4.1i”之类的内容,要么忽略整个内容,要么只读取第一个数字。

我想通过允许用户以任何这些格式输入数字,并允许他们简单地输入类似“3i”而不是“0 + 3i”的内容来改进此方法。

我在研究过程中发现的通常涉及模式或 Double.parseDouble,我都没有为我的案例工作。

我的问题是:如何检测这些字符以便正确解析复数?

P.S:这是我现在读取用户输入的方法

if(userIn.hasNextDouble())
{
this.real=userIn.nextDouble();
}

if(userIn.hasNextDouble())
{
this.imag=userIn.nextDouble();
}

最佳答案

读取 String 而不是 Double。然后:

boolean firstPositive = true;
boolean secondPositive = true;
if (s.charAt(0) == '-') // See if first expr is negative
firstPositive = false;
if (s.substring(1).contains("-"))
secondPositive = false;
String[] split = s.split("[+-]");
if (split[0].equals("")) { // Handle expr beginning with `-`
split[0] = split[1];
split[1] = split[2];
}
double realPart = 0;
double imgPart = 0;
if (split[0].contains("i")) // Assumes input is not empty
imgPart = Double.parseDouble((firstPositive ? "+" : "-") + split[0].substring(0,split[0].length - 1));
else
realPart = Double.parseDouble((firstPositive ? "+" : "-") + split[0]);
if (split.length > 1) { // Parse second part of expr if it exists
if (split[1].contains("i"))
imgPart = Double.parseDouble((secondPositive ? "+" : "-") + split[1].substring(0,split[1].length - 1));
else
realPart = Double.parseDouble((secondPositive ? "+" : "-") + split[1]);
}
// Use realPart and imgPart ...
System.out.println(realPart + (imgPart < 0 ? "" : "+") + imgPart + "i");

如果您只想支持 Integer,则将 Double.parseDouble 更改为 Integer.parseInt

它处理从 3-5.123i-5-631231.2123123i 的所有内容

关于java - 在java中解析一个复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32012027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com