繁体   English   中英

Java - 编写一个程序,提示用户输入一个整数,然后输出数字的单个数字和数字之和

[英]Java - Write a program that prompts the user to input an integer and then outputs both the individual digits of the number and the sum of the digits

我已经看到这个问题问了几次,但所有的回答都包含了我在这门课上还没有学到的功能,我确定一定有一种方法可以只用我学到的东西来做到这一点。 没有数组等......只是循环和先验。 我并不是真的在寻找答案,而只是寻找一些方向。 我已经包含了我已经完成的代码。 该程序需要能够处理负数、总和,然后以正确的顺序打印。 现在我的代码除了按正确的顺序打印外,什么都做。 我明白为什么它以相反的顺序打印(因为循环去掉然后打印 int 中的最后一个数字),但我似乎无法找到改变它的方法。 我曾尝试将其转换为字符串、字符,但无法获取。 请看一看,如果您不介意,请提供一些指导。 先感谢您。

    public static void main(String[] args) {
        int num;
        int sum;
        int temp;

        System.out.print("Enter an integer, positive or negative: ");
        num = keyboard.nextInt();
        System.out.println();

        if (num < 0)
            num = -num;

        sum = 0;

        while (num > 0) {
            temp = num;
            sum = sum + num % 10;           //Extracts the last digit and adds it to the sum
            num = num / 10;                 //removes the last digit
            System.out.print(temp % 10 + " ");
        }

        System.out.println(" and the sum is " + sum);
    }
}

到目前为止,不知道他们在课堂上教给你的内容是什么,尽管效率很低,但很容易做到的是将数字重新创建为字符串。

String numbers = "";
while (num > 0) {
    temp = num;
    sum = sum + num % 10;           //Extracts the last digit and adds it to the sum
    num = num / 10;                 //removes the last digit
    // System.out.print(temp % 10 + " ");
    numbers = (temp % 10) + " " + numbers;
}

System.out.println(numbers + "and the sum is " + sum);

您已经用(temp%10)抓取了一位数字,然后用num = num / 10右移了原始数字。还有一些其他数据结构可以使用,例如Stack或LinkedList,它们在情况下会更自然地使用像您一样,或者您可以使用StringBuilder将数字附加到末尾,然后使用reverse()方法以正确的顺序将其取回,但是这些数据结构可能位于您提到的不知道的数组之后。

考虑到这些限制,我使用了字符串连接。 通常会发生以下情况:

String numbers = "";
num = 123;
digit = num % 10; // digit=3
num /= 10; // num=12
numbers = digit + " " + numbers; // numbers="3 " uses old value on right side of the equals

// next iteration
digit = num % 10; // digit=2
num /= 10; // num=1
numbers = digit + " " + numbers; // numbers="2 3 " see how the digit is put to the left of the old value

// last iteration
digit = num % 10; // digit=1
num /= 10; // num=0
numbers = digit + " " +numbers; // numbers="1 2 3 " notice there is an extra space at the end which is ok for your example

如果result> 0 counter ++,则设置一个计数器,循环num / 10。 最后,counter + 1将是位数

    System.out.println("Please enter numbers:  ");

    int number_entered = input.nextInt();
 
    int sum = 0;
    String reserve = "";
    if (number_entered < 0 ) {
        number_entered = number_entered * -1;
        
    }
    for (number_entered = number_entered; number_entered > 0; number_entered/=10){
        int lastdgt = number_entered%10;
        sum += lastdgt;
        reserve = lastdgt + " " + reserve + " ";       
        
    }
        
    System.out.println(reserve);
    System.out.println("The sum is = " + sum );
 
}

}

暂无
暂无

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

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