[英]Blue Pelican Add 'Em Up Project
我已经在一个名为Add'Em Up的Blue Pelican Java项目上工作了几个小时,但我不知道如何使它工作。 项目描述是这样的:
考虑下面的程序,该程序允许从键盘输入8 + 33 + 1,345 +137之类的字符串。 然后,Scanner对象将加号(和任何相邻的空格)用作定界符,并生成这些数字的总和(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'。
从编译和运行的角度来看,您的代码是不错的-这里的内容就是所谓的“逻辑错误”。 您要求程序执行的步骤与您希望程序执行的实际步骤不同。 请仔细考虑程序各点所发生的情况,以确保其行为正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.