我已经在名为 Add 'Em Up 的 Blue Pelican Java 项目上工作了几个小时,但我不知道如何让它工作。项目描述是这样的:
考虑以下程序,它允许输入 8 + 33 + 1,345 +137 等内容 从键盘输入的字符串。然后,扫描仪对象使用加号(以及任何相邻的 空格)作为分隔符并生成这些数字的总和(1523)。
import java.io.*;
import java.util.*;
public class Tester
{
public static void main(String args[])
{
Scanner kb = new Scanner(System.in);
System.out.print("Enter something like 8 + 33 + 1,345 +137 : ");
String s = kb.nextLine( );
Scanner sc = new Scanner(s);
sc.useDelimiter("\\s*\\+\\s*");
int sum = 0;
while(sc.hasNextInt( ))
{
sum = sum + sc.nextInt( );
}
System.out.println("Sum is: " + sum);
}
}
输出通常如下所示: 输入类似 8 + 33 + 1,345 +137 : 8 + 33 + 1,345 + 137 总和是:1523 现在修改该程序以允许加号或减号。不要忘记允许 序列中第一个数字的前导加号或减号。如果前导数字没有符号, 假设该数字是正数。您的输出通常应如下所示: 输入类似 8 + 33 + 1,345 -137 : 8 + 33+ 1,345 -137 总和是:1249
下面的代码是我目前拥有的。该程序对于加法工作得很好,但由于某种原因减法不起作用。例如,如果您输入 5-2,答案将显示为 -7 而不是 3。
public class AddEmUp {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
System.out.print("Enter something like 8 + 33 + 1345 - 137 : ");
String s = kb.nextLine();
Scanner sc = new Scanner(s);
int sum = 0;
if (s.contains("+")) {
sc.useDelimiter("\\s*\\+\\s*");
while (sc.hasNextInt()) {
sum = sum + sc.nextInt();
}
}
if (s.contains("-")) {
sc.useDelimiter("\\s*\\-\\s*");
while (sc.hasNextInt()) {
sum = sum - sc.nextInt();
}
}
System.out.println("Sum is: " + sum);
}
任何关于我应该尝试做什么来解决这个问题的帮助将不胜感激。谢谢!
在这段代码中,减法的情况比加法需要更多的工作!我认为一旦您了解正在发生的事情,您就会明白需要如何调整策略。
这就是输入 5 - 2 现在发生的情况。
int sum = 0
s.contains("-") is true.
sum = sum - sc.nextInt() occurs,
Remember at the top of your code sum was set to zero!
so sum = 0 - 5
Now sum = -5.
s.contains("-") is true.
sum = sum - sc.nextInt() occurs
sum = -5 - 2.
At the end of your program, sum = -7.
您将需要稍微重构一下程序的逻辑。现在,您检查的第一件事是查看输入中是否有“+”或“-”符号。如果有“+”符号,则从 sum=0 开始并将看到的每个数字相加。这对于加法非常有效,并且您总是会得到正确的答案。如果有“-”符号,则从 sum=0 开始,减去看到的每个数字。但这并不是减法的目的。在 5 - 2 的情况下,您更愿意做的是从 sum=0 '+ 5' 然后是 '- 3'。
您的代码在编译和运行方面没有问题 - 您这里所遇到的是所谓的“逻辑错误”。您要求程序执行的步骤与您希望程序执行的实际步骤不同。仔细考虑程序每个点发生的情况,以确保其行为正确。
`导入java.io.*;
导入java.util.*;
导入java.util.Scanner;
公共课AddEmUp
{
public static void main(String[] args)
{
Scanner kb = new Scanner(System.in);
System.out.print("Enter something like 8 + 33 + 1345 -137 : ");
String s = kb.nextLine();
String r = s.replace("-", "+ -");
Scanner rc = new Scanner(r);
rc.useDelimiter("\\s*\\+\\s*");
int sum = 0;
while(rc.hasNextInt())
{
sum = sum + rc.nextInt();
}
System.out.println("Sum is: " + sum);
}
}`