在java中如何计算数字的位数和?

在java中如何计算数字的位数和?,java,while-loop,sum,Java,While Loop,Sum,我有一个小函数,它要求用户输入一个正数,然后给他一个倒数,然后计算其数字之和 代码的第一部分工作正常,但数字总和返回零。如何解决此问题 我知道用户输入必须被要求输入一次,而不是两次,因此如何修复此功能,因为它不接受用户输入 代码: 更新的代码 这是因为您在reverse和sum方法中共享相同的数字,当您第一次调用reverse方法时,您继续将数字除以0,因此当您使用sum方法时,您的数字为1,因此sum为0 为了纠正这一点,我建议您定义名为mynumber的局部变量,如下所示: public i

我有一个小函数,它要求用户输入一个正数,然后给他一个倒数,然后计算其数字之和

代码的第一部分工作正常,但数字总和返回零。如何解决此问题

我知道用户输入必须被要求输入一次,而不是两次,因此如何修复此功能,因为它不接受用户输入

代码: 更新的代码
这是因为您在reverse和sum方法中共享相同的数字,当您第一次调用reverse方法时,您继续将数字除以0,因此当您使用sum方法时,您的数字为1,因此sum为0

为了纠正这一点,我建议您定义名为mynumber的局部变量,如下所示:

public int fill() {

    System.out.println("enter the number");
    Scanner in = new Scanner(System.in);
    num = in.nextInt();

    if (num < 0) {
        System.out.println("enter a positive number");
    }
    int myNumber = num;  
    while (myNumber != 0) {
        reverse = reverse * 10;
        reverse = reverse + myNumber % 10;
        myNumber = myNumber / 10;
    }
    System.out.println("your reverse number is : " + reverse);
    return num;
}

OUTPUT:
enter the number
1234
your reverse number is : 4321
sum of digits: 10
public int fill(){
System.out.println(“输入编号”);
扫描仪输入=新扫描仪(系统输入);
num=in.nextInt();
if(num<0){
System.out.println(“输入正数”);
}
int myNumber=num;
while(myNumber!=0){
反向=反向*10;
反向=反向+我的编号%10;
myNumber=myNumber/10;
}
System.out.println(“您的反向编号为:“+反向”);
返回num;
}
输出:
输入号码
1234
你的号码是:4321
位数总和:10

您正在以一种毫无帮助的方式重用
num
。尝试为方法定义局部变量,并仅在需要时使用实例字段

还要注意,您的
fill()
方法返回一个您没有使用的值

这建议您完全删除
num
字段。然后将局部变量
num
添加到
fill()
方法中,然后更改
sumdights()
的签名以获取参数:

public void sumDigits(int num)
现在,最后的代码变成了

Question3 q3 = new Question3();
int n = q3.fill();
q3.sumDigits(n);

您的
num
成员通过读取一个数字并使用此循环进行初始化:

    while (num != 0) {
        reverse = reverse * 10;
        reverse = reverse + num % 10;
        num = num / 10;
    }
您正在计算
反向
,但在此过程中修改了
num
的值。循环结束后,
num
的值为0,之后,当您尝试使用它时,它的值已经丢失。请尝试这样做:

    reverse = 0;
    int tempNum = num;
    while (tempNum != 0) {
        reverse = reverse * 10;
        reverse = reverse + tempNum % 10;
        tempNum = tempNum / 10;
    }

此代码使用0初始化
reverse
,将
num
的值存储为临时值,您在过程中修改
tempNum
,因此
num
的值保持不变,您可以稍后使用它。

我已稍微更新了您的代码,并给出了正确的答案:

导入java.util.array; 导入java.util.Scanner

公开课问题3{

private int num;
private int sum;
private int reverse;


public int fill() {

    System.out.println("enter the number");
    Scanner in = new Scanner(System.in);
    num = in.nextInt();

    if (num < 0) {
        System.out.println("enter a positive number");
    }
    while (num != 0) {
        reverse = reverse * 10;
        reverse = reverse + num % 10;
        num = num / 10;
    }
    System.out.println("your reverse number is : " + reverse);
    return reverse;
}

public void sumDigits(int number) {
    num = number;

    while (num != 0) {
        sum = sum + num % 10;
        num = num / 10;
    }

    System.out.println("sum of digits: " + sum);
}

public static void main(String[] args) {

    Question3 q3 = new Question3();
   int number =  q3.fill();
    q3.sumDigits(number);
}
private int num;
私人整数和;
私有int反转;
公共整数填充(){
System.out.println(“输入编号”);
扫描仪输入=新扫描仪(系统输入);
num=in.nextInt();
if(num<0){
System.out.println(“输入正数”);
}
while(num!=0){
反向=反向*10;
反向=反向+数量%10;
num=num/10;
}
System.out.println(“您的反向编号为:“+反向”);
反向返回;
}
公共数字(整数){
num=数字;
while(num!=0){
总和=总和+num%10;
num=num/10;
}
System.out.println(“位数总和:+sum”);
}
公共静态void main(字符串[]args){
问题3 q3=新问题3();
int number=q3.fill();
q3.数字(数字);
}

}

将整数作为字符串读取可能会更容易,是的,我知道,但我不想让用户再次输入数字,我只需要让他输入一次,然后我将数字反转,并给出其数字的总和。你的解决方案不起作用,仍然是相同的结果,它给我零我得到了正确的输出,正如我的答案和用户不必多次输入,一次就足够了。共享您的更新代码并通知。好的,我将用更新的更改编辑我的问题,您能解释它为什么工作吗?您在.nextInt()中更改了
myNumber=in;如果(myNumber<0){System.out.println(“输入正数”);}
我没有提到我们需要在那里进行更改。查看我的代码并与您的代码进行比较。它应该和我的完全一样。实际上num是一个实例变量,不需要使用fill方法将num传回。在这种情况下,OP可以创建局部变量并使用它来代替num变量。在我看来,删除
num
字段的建议是更好的选择,因为类是无状态的。
Question3 q3 = new Question3();
int n = q3.fill();
q3.sumDigits(n);
    while (num != 0) {
        reverse = reverse * 10;
        reverse = reverse + num % 10;
        num = num / 10;
    }
    reverse = 0;
    int tempNum = num;
    while (tempNum != 0) {
        reverse = reverse * 10;
        reverse = reverse + tempNum % 10;
        tempNum = tempNum / 10;
    }
private int num;
private int sum;
private int reverse;


public int fill() {

    System.out.println("enter the number");
    Scanner in = new Scanner(System.in);
    num = in.nextInt();

    if (num < 0) {
        System.out.println("enter a positive number");
    }
    while (num != 0) {
        reverse = reverse * 10;
        reverse = reverse + num % 10;
        num = num / 10;
    }
    System.out.println("your reverse number is : " + reverse);
    return reverse;
}

public void sumDigits(int number) {
    num = number;

    while (num != 0) {
        sum = sum + num % 10;
        num = num / 10;
    }

    System.out.println("sum of digits: " + sum);
}

public static void main(String[] args) {

    Question3 q3 = new Question3();
   int number =  q3.fill();
    q3.sumDigits(number);
}