1

我让用户输入这种格式的分数问题(4/8–3/12 或 3+2/3 或 12/16*4 或 -2/3/64/96),需要将两个分数拆分为一个数组,然后我需要提取两者的分子和分母,这样我就可以在我的另一个文件中简化它们并进行它要求的任何计算,所以我需要使用一个数组,这样我就可以调用其中有符号的元素。

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


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

有没有办法将数组拆分为 int 变量?我搞不清楚了。解决方案可能很简单,但在这个项目中已经工作了 7 个小时左右。

4

3 回答 3

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+表示“一个或多个数字;[+-/*]表示“任何一个+、、、-/*

这是关于 ideone 的演示

请注意,您的程序需要非常小心地确定 a+或 a-是一元“更改符号”还是二元运算:当符号位于开头或紧跟在另一个运算符之后时,它是一元的;否则,它是二进制的。

于 2013-04-12T02:19:23.340 回答
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

现在只需开始用你将如何做到这一点来替换每一行。我相信您可能可以弄清楚每一步,但有时我们在考虑整个问题时会迷失方向。如果您无法确定单个步骤,请发布您尝试过的代码,我们可以帮助解决特定问题。

于 2013-04-12T02:17:56.873 回答
0

到目前为止,您的代码只是将输入拆分为表达式。您仍然需要将表达式拆分为分数。

当您已经有分数字符串数组时,您可以将每个元素拆分为 2 个整数:

  1. 将其拆分为子字符串split("/")

  2. 使用方法将每个子字符串转换为 int Integer.parseInt()

于 2013-04-12T02:27:50.043 回答