蓝鹈鹕添加项目

问题描述 投票:0回答:2

我已经在名为 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);
    }

任何关于我应该尝试做什么来解决这个问题的帮助将不胜感激。谢谢!

java
2个回答
0
投票

在这段代码中,减法的情况比加法需要更多的工作!我认为一旦您了解正在发生的事情,您就会明白需要如何调整策略。

这就是输入 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'。

您的代码在编译和运行方面没有问题 - 您这里所遇到的是所谓的“逻辑错误”。您要求程序执行的步骤与您希望程序执行的实际步骤不同。仔细考虑程序每个点发生的情况,以确保其行为正确。


0
投票

`导入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);

}

}`

© www.soinside.com 2019 - 2024. All rights reserved.