【问题标题】:Java: Adding and Subtracting Digits Taken from a StringJava:从字符串中添加和减去数字
【发布时间】:2018-03-23 23:21:13
【问题描述】:

所以这个程序的目的是让用户输入一个整数,程序会将其识别为字符串。然后程序必须能够识别输入的每个数字并按如下方式操作它们。如果数字相同或下一个数字更大,则将数字相加。如果下一位数字较小,则要减去数字。

一个例子: 输入“234224”应该输出13(2+3+4-2+2+4)

但是我的程序给出的输出是 17。 我不知道如何解决这个问题。我的问题出在我的第一个 if 语句中。当读取第二次出现的“2”时,我希望程序从计算的输出中减去 2,但由于我对第一个 if 语句的编码方式,它会加 2。

如果可能的话,有人可以使用与我相同的方法给我一个解决方案吗?

public class StringManipulation {

    public static void main(String[] args) {
        String userInt;
        int total = 0;

        Scanner input = new Scanner(System.in);

        System.out.println("Enter an integer:  ");
        userInt = input.nextLine();

        for (int k = 0; k < userInt.length(); k++) {
            int presentNum = userInt.charAt(k);
            System.out.println(userInt.charAt(k));

            if (presentNum == userInt.charAt(0)) {
                presentNum = Character.getNumericValue(presentNum);
                total += presentNum;
                System.out.println("counter currently at (same)" + total);
            } else if (presentNum >= userInt.charAt(k - 1)) {
                total += Character.getNumericValue(presentNum);
                System.out.println("counter currently at (adding)" + total);
            } else if (presentNum < userInt.charAt(k - 1)) {
                total -= Character.getNumericValue(presentNum);
                System.out.println("counter currently at (subtracting)" + total);
            }
        }

        System.out.println("Output= " + total);

        input.close();

    }
}

【问题讨论】:

  • “我不知道如何解决这个问题” 您是否尝试过使用调试器来识别问题? How to debug small programs
  • 好奇:为什么你的循环中有一个charAt(0) 调用?任务描述中没有任何内容说明与第一个数字进行比较。这完全是为了比较相邻的数字。

标签: java string methods


【解决方案1】:

您的问题在于您的初始检查

if (presentNum == userInt.charAt(0)) 

换句话说,如果您正在查看的数字与第一个数字相同,您就可以进行操作。在这种特殊情况下,当您在字符串后面遇到2 时,该条件就会出现,您最终会添加它而不是减去它。

你可能希望这个条件是

if (k == 0)

【讨论】:

    【解决方案2】:
     if (presentNum == userInt.charAt(0)) {
             presentNum=Character.getNumericValue(presentNum);
             total+=presentNum;
             System.out.println("counter currently at (same)" + total);
         }
    

    你的问题就在这里。无论前一位数字如何,第一位数字都会添加到总和中。这意味着输出从 13(2+3+4-2+2+4) 变为 17(2+3+4 +2 +2+4)。

    你应该有类似的东西

        if (k==0){
             presentNum=Character.getNumericValue(presentNum);
             total+=presentNum;
        }
    

    第一个数字。

    【讨论】:

      【解决方案3】:

      尝试改变第一个if条件,如下

      if (k==0) {
          presentNum = Character.getNumericValue(presentNum);
          total += presentNum;
          System.out.println("counter currently at (same)" + total);
      }
      

      因为,在第一次迭代中,您只有一个操作数,并且您没有在条件的第 0 个索引处取值,而不仅仅是查看它是否是第一个索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-30
        • 2018-10-05
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多