Beam数是一个数字,其中数字的位数平方和大于数字本身。
例如:在数字25中,数字平方和=2^2+5^2=4+25=29(大于接受的数字(
因此,25是波束数。
我是一名学生,正试图为一项实践作业编写一个程序,但我似乎找不到任何解决方案。以下是任务图片:任务图片
这是我的尝试:
import java.util.Scanner;
class Beam3meth
{
static int sum,m;
public static void getNum()
{
System.out.println("f");//clearing the screen
Scanner sc= new Scanner(System.in);
System.out.println("Enter the number");
m = sc.nextInt();
int flag = m;
}
public static void squareSum()
{
sum = 0;
while (m > 0)
{
sum = sum + (m%10)*(m%10);
m = m/10;
}
}
public static void isBeam()
{
if (sum > flag)
{
System.out.println("It is a Beam number");
}
else
{
System.out.println("It is not a Beam number");
}
}
public static void main()
{
Beam3meth obj = new Beam3meth();
obj.getNum();
obj.squareSum();
obj.isBeam();
}
}
问题是只能有2个全局变量(必须在2个或多个方法中使用(,如赋值详细信息中所述。但还有一个标志变量(用于在m的值减为0之前复制它(,它必须在2个方法中使用。所有3个方法都必须是void,因此不能执行任何"按引用调用"/返回值。为了适应所有限制,我应该做哪些更改?
您的赋值不要求静态变量。它只说类Beam应该有两个实例变量,即m&总和您可以始终在函数中使用局部变量,并在这些函数中存储值。
以下步骤应能解决问题:
- 您不必制作m&求和静态。所有功能也是如此。可以在不生成类对象的情况下调用静态函数。这里的情况并非如此
- 您不需要int标志=m;行。删除它
- 不要修改m,而是在最初初始化为m值的函数中创建一个局部变量,然后修改该变量。这样做完全没问题。您可以创建任意数量的局部变量,并且仍然满足此分配的条件
- 为main函数创建一个名为main的单独类。在那里创建梁类的实例并调用函数
以下是我如何解决此问题的代码:
附言:平方sum函数的逻辑也是正确的。只是不要修改m。创建一个局部变量(我在代码中创建了quot(。
import java.util.*;
class Beam
{
int m;
int sum;
public Beam()
{
m = 0;
sum = 0;
}
void getNum()
{
System.out.print("Enter a number ");
Scanner sc = new Scanner(System.in);
this.m = sc.nextInt();
}
void squareSum()
{
int mod, quot = m, div = 10;
while(quot >= div/10 )
{
mod = quot%div;
sum = sum + mod*mod;
quot = quot/div;
}
}
void isBeam()
{
if(sum>m)
{
System.out.println("The integer " + m + " is a beam number");
}
else
{
System.out.println("The integer " + m + " is not a beam number");
}
}
}
class Main {
public static void main(String[] args) {
Beam b = new Beam();
b.getNum();
b.squareSum();
b.isBeam();
}
}