繁体   English   中英

为什么我的 Beam 编号程序给出了错误的 output?

[英]Why is my Beam number program giving the wrong output?

Beam数是一个数字,其中数字的数字的平方和大于数字本身。

例如:在没有。 25,数字平方和 = 2^2 + 5^2 = 4 + 25 = 29(大于接受的数字)

因此 25 是 Beam 编号。

这是我的代码:

import java.util.Scanner;
class test
{
    public static void main()
    {
        System.out.println("\f");
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the number");
        int m = sc.nextInt(); 
        int sum  = 0;
        while (m > 0)
        {
            sum += (m%10)*(m%10);
            m = m/10;
        }
        if (sum > m)
        {
            System.out.println("It is a Beam number");
        }
        else
        {
            System.out.println("It is not a Beam number");
        }
    }
}

程序编译正确,但逻辑上存在一些问题,因为它没有给出所需的 output。 给出一张output的图片: 在此处输入图像描述

51 显然不是 Beam 号。 因为其数字的平方和 (25+1=26) 本身小于 51。 我要做哪些改变?

您的 while 循环正在破坏有关输入数字的信息。 每当您输入大于 0 的数字时,总和将大于 0,但m将始终为0

while循环中使用另一个初始化为m的变量来执行计算,以便m保持输入的值,以便最后的比较是正确的。

这是您自己调试的方法。 注意打印语句。

class test // unrelated note:  by convention class names should start with
           // upper case letters.
{
    public static void main()
    {
        System.out.println("\f");
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the number");
        int m = sc.nextInt(); 
        int sum  = 0;
        System.out.println("Before while loop.");
        System.out.println("m = " + m + ", sum = " + sum);
        while (m > 0)
        {
            sum += (m%10)*(m%10);
            m = m/10;
        }
        System.out.println("After while loop.");
        System.out.println("m = " + m + ", sum = " + sum);
        if (sum > m)
        {
            System.out.println("It is a Beam number");
        }
        else
        {
            System.out.println("It is not a Beam number");
        }
    }
}

在关键位置使用print statements并打印出各个字段是调试程序的第一步也是最常见的步骤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM