我一直在使用这个网站,但我从来没有写过任何东西。 今天,我偶然发现了一个我无法找到解决方案的问题。
问题在于,我有一个int variable
,其数字位数未知。要求我将所有这些数字相加,然后将所有这些数字分开打印/ shown_as_a_message。
例如,用户输入数字" 12345678"最后我需要有一条消息说"数字1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36"。我知道如何分离和总结所有这些数字,但我不知道如何保存每个数字然后显示,因为我不仅不知道正确数量的数字,而且我不知道。我们也知道他们的价值观。
通常情况下这并不难,但这对我来说很棘手,因为我们还没有学过arrays
,strings
,索引等等。 ,我们不允许使用它们。所以,我应该用最简单的代码类型来做这件事。
到目前为止,我已经得到以下信息:
import java.util.Scanner;
public class Numbers {
public static void main(String[] args) {
int number, result;
Scanner sc = new Scanner(System.in);
System.out.println("Enter number:");
number = sc.nextInt();
result = 0;
while (number > 0){
result = result + (number % 10);
number = number / 10;
}
System.out.println("This is where the message would go.");
}
}
答案 0 :(得分:2)
static final Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int number, result;
System.out.println("Enter number:");
number = input.nextInt();
result = 0;
System.out.print("The numbers: ");
//Reverses the number
int reversedNum = 0;
while (number != 0) {
reversedNum = reversedNum * 10 + number % 10;
number = number / 10;
}
//Iterates over the number and prints it out
while (reversedNum > 0) {
System.out.print((reversedNum % 10));
result = result + (reversedNum % 10);
reversedNum = reversedNum / 10;
if (reversedNum > 0) {
System.out.print(" + ");
}
}
System.out.println(" = " + result);
}
这可以在不使用数组和字符串的情况下以正确的顺序打印出所有数字。
示例:
Enter number:
12345
The numbers: 1 + 2 + 3 + 4 + 5 = 15
BUILD SUCCESSFUL (total time: 5 seconds)
答案 1 :(得分:1)
也许这样的地方,你没有使用任何类型的容器。只需在每次找到新号码时连接到字符串。
int number, result;
String finalOutput = "";
Scanner sc = new Scanner(System.in);
System.out.println("Enter number:");
number = sc.nextInt();
result = 0;
while (number > 0){
result = result + (number % 10);
finalOutput += (number % 10);
number = number / 10;
if(number > 0)
{
finalOutput += " + ";
}else{
finalOutput += " = ";
}
}
System.out.println("The numbers " + finalOutput + result);
答案 2 :(得分:1)
您希望在循环时打印出这些数字。例如:
while (number > 0){
System.out.print( (number % 10) + " + " );
result = result + (number % 10);
number = number / 10;
}
您仍然需要正确格式化输出。
答案 3 :(得分:1)
一年前我有类似的任务。基本上我所做的是使用String.valueOf(int)
将输入的整数转换为字符串(Integer.toString(int)
也可以工作)然后我将该字符串中的每个字符串转回整数并将它们添加到总和中。
Scanner sc = new Scanner(System.in);
int sum= 0;
System.out.println("Number?");
int num = sc.nextInt();
sc.close();
String countNum = String.valueOf(num);
for(int i = 0; i < countNum.length(); i++) {
int j = Character.digit(countNum.charAt(i), 10);
sum += j;
}
System.out.println("The sum is: " + sum);
答案 4 :(得分:1)
您可以递归地执行此操作:
int number,result;
Scanner sc = new Scanner(System.in);
System.out.println("Enter number:");
number = sc.nextInt();
//sum to the result and print last digit and the result
int last = number%10;
result = reverse(number/10);
System.out.print(last + " = "+ (result + last));
递归方法,打印字符串并计算总和(最后一位数除外):
private static int reverse(int number) {
if(number>0){
int p = number % 10 + reverse(number/10);
System.out.print(number % 10 + " + ");
return p;
}
return 0;
}
答案 5 :(得分:1)
如果您正常使用正则表达式,并且只想插入所有数字之间用空格包围的加号,则可以使用replaceAll()
方法:
"12345678".replaceAll("\\B", " + ") // returns "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8"
\\B
是用于匹配不分词符号的字符之间的空位置的正则表达式(\\b
将是 字的位置休息时间)。由于输入是单个&#34;字&#34;由所有数字组成,值的开头和结尾是分词,数字之间的位置不是分词。
replaceAll()
然后用" + "
替换数字之间的所有空格,并在简单表达式中得到您想要的内容。
答案 6 :(得分:0)
(代表OP发布)。
Luke Melaia解决了!
另一件可能对谷歌人有帮助的事情是:
使用String的最短解决方案 - &gt; &#34; 12345678&#34; .replaceAll(&#34; \ B&#34;,&#34; +&#34;)➜1+ 2 + 3 + 4 + 5 + 6 + 7 + 8 - 安德烈亚斯强>
user6904265 的递归解决方案。
谢谢大家的帮助。非常感激。 &LT; 3
答案 7 :(得分:0)
借助Java8,您可以通过以下方式做到这一点:
public int sumNumber(int number) {
return String.valueOf(number).chars().map(Character::getNumericValue).sum();
}
这可能对某人有所帮助。