【问题标题】:Why is it removing the 0 in the end?为什么它最终删除了0?
【发布时间】:2021-04-29 05:38:29
【问题描述】:

所以,我们在第一学期就做了这个。为什么它最终删除了0?我该如何解决?我输入 4000,它显示 4,当我需要时是 4 0 0 0。如果我输入 8030,它会输出 8 0 3。

if (number > 0) {
        while (number != 0) {
        individualNum = individualNum * 10 + number % 10;
        number = number / 10;
        }
        while (individualNum > 0) {
        System.out.print((individualNum % 10));
        sum = sum + (individualNum % 10);
        individualNum = individualNum / 10;
        if (individualNum > 0) {
        System.out.print(" ");
        }
        else if (individualNum < 0){
        System.out.print((individualNum ));
        sum = sum + (individualNum % 10) * -1;
        individualNum = individualNum / 10;
        }
        }
        System.out.println(" = " + sum);
        }
        else if (number < 0){
        while (number != 0) {
        individualNum = individualNum * 10 + number % 10;
        number = number / 10;
        }
        while (individualNum < 0) {
        System.out.print((individualNum*-1 % 10));
        sum = sum + (individualNum % 10);
        individualNum = individualNum / 10;
        if (individualNum < 0) {
        System.out.print(" ");
        }
        else if (individualNum < 0){
        System.out.print((individualNum ));
        sum = sum + (individualNum % 10) ;
        individualNum = individualNum / 10;
        }
        }
        System.out.println(" = " + sum * -1 );
        }
        }catch (InputMismatchException x ){
        System.out.println("Please enter the negative sign at the front");
        }
    }
}

【问题讨论】:

  • 只是猜测...与您的 while 条件无关:while (number != 0)?
  • 您是否已经使用调试器单步执行您的代码?您的条件似乎都排除了 0 值,即 number != 0individualNum &lt; 0 等。由于缺少缩进,我还发现您的代码很难阅读,请修复此问题。

标签: java control-structure


【解决方案1】:

如果我正确理解您的代码,您的目标是列出各个数字并打印它们的总和。为此,您首先将输入数字的“倒数”计算为individualNum,即如果您的输入是8030,您希望得到0308。但是,请注意整数没有前导零,因此您实际上会得到 308(或者在 4000 的情况下只是 4)。

这就是你的尾随零丢失的地方。

要解决此问题,您需要在第二个循环中再次使用 number,但由于您在第一个循环中将其减少为 0,因此无法正常工作。解决方案?先复制一份。

if (number > 0) {      ​
 ​//"invert" number
  int n = number;
  while (n != 0) {
    individualNum = individualNum * 10 + n % 10;
    n = n / 10;
  }

  //use number again, i.e. loop until n/10 reaches 0
  n = number;     
  while (n > 0) {
    System.out.print((individualNum % 10));
    sum = sum + (individualNum % 10);
    individualNum = individualNum / 10;
    system.out.print(" ");              
    n /= 10;
  }
  System.out.println(" = " + sum);
}
    

看起来您也想同样处理负数,即 -8030 仍应打印 8 0 3 0 = 11。在这种情况下,您应该首先否定任何负数,例如

if(number < 0 ) {
  number *= -1;
}

最好使用number 的副本,这样您就可以保留最初的输入。

【讨论】:

  • 好答案+1,但请问他有必要反转整数吗?我想我在这里缺少一些基本的东西。为什么不循环并打印单个值和之后的总和?
  • @Mab 如果没有先反转数字,则循环将打印 0 3 0 8,因为 x % 10(8030 % 10 = 0、803 % 10 = 3 等)。他想从最高位开始,但他不知道最高位是多少,因此您需要从前迭代。如果你这样做两次,你就会得到正确的顺序。
  • OK 转向这里几分钟后,如果我是对的,需要反向的原因是因为我们还需要打印出每个数字。如果它只是为了总和while(number&gt;0){sum = sum + number%10; number/=10;} 会做对吗?
  • @Mab 是的,在这种情况下,顺序无关紧要,一个简单的循环就足够了。
猜你喜欢
  • 1970-01-01
  • 2018-04-12
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
相关资源
最近更新 更多