需要将负数从-2345迭代到2 3 4 5然后它总和为14.我无法弄清楚的部分是2 3 4 5出来为-2 3 4 5 ......语法我错过了?也许它只是一行代码或声明......
import java.util.*;
public class sumofNumbers{
static Scanner console = new Scanner(System.in);
public static void main(String[] args){
int input;
int sum = 0;
int strnbr = 0;
int counter = 1;
String nbr = "";
System.out.print("enter a number: ");
input = console.nextInt();
if (input == (-input)) {
input = input * (-1);
nbr = String.valueOf(input);
strnbr = nbr.length();
System.out.print("the digits of " + input + " are: ");
for (int i = 0; i < strnbr; i++) {
String var = nbr.substring(i, counter);
int var1 = Character.getNumericValue(var.charAt(0));
System.out.print(var + " ");
sum = sum + var1;
counter++;
}
System.out.println();
System.out.println("the sum is: " + sum);
} else {
nbr = String.valueOf(input);
strnbr = nbr.length();
System.out.print("the digits of " + input + " are: ");
for (int i = 0; i < strnbr; i++) {
String var = nbr.substring(i, counter);
int var1 = Character.getNumericValue(var.charAt(0));
System.out.print(var + " ");
sum = sum + var1;
counter++;
}
System.err.println();
System.out.println("the sum is: " + sum);
}
} }
答案 0 :(得分:2)
对您的代码的评论:
if (input == (-input))
只适用于0
和Integer.MIN_VALUE
,这两个您可能并不关心的边缘情况。看起来你的意思是if (input < 0)
。
input = input * (-1)
最好写成input = -input
。
通过以上操作,if
和else
块变得相同,因此您只需要if
来执行input = -input
。
您甚至可以在不if
的情况下执行此操作,方法是始终执行input = Math.abs(input)
。
counter
是不必要的。您应该使用substring(i, i + 1)
,因为这就是您的真实含义。
substring(i, i + 1).charAt(0)
是撰写charAt(i)
的缓慢方式。
要迭代字符串的所有字符,您可以调用toCharArray()
并使用增强的for
循环。
在print(var + " ")
var
是{1}}是一位数,String
是数字还是{{}并不重要1}}与数字。结果是一样的。
由于char
只包含字符int
到nbr
,'0'
是说'9'
的缓慢方式。
Character.getNumericValue(ch)
可以缩短为ch - '0'
。
不要打印到sum = sum + digit
。
Java命名对象声明类名应以大写字母开头。
不要预先声明您的变量。在需要的地方声明它们。这通常也有助于缩小其范围。
应用所有这些,将代码更改为:
sum += digit
示例输出:
System.err
答案 1 :(得分:1)
替换以
开头的代码if (input == (-input)) {
与
System.out.print("the digits of " + input + " are: ");
input = Math.abs (input);
nbr = String.valueOf(input);
strnbr = nbr.length();
for (int i = 0; i < strnbr; i++) {
String var = nbr.substring(i, counter);
int var1 = Character.getNumericValue(var.charAt(0));
System.out.print(var + " ");
sum = sum + var1;
counter++;
}
System.out.println();
System.out.println("the sum is: " + sum);
并删除结束括号
答案 2 :(得分:0)
主要问题在于你的if语句:
if (input == (-input))
永远不会是真的。
这简化了您的代码,因此不会根据负数/正数重复两次。它可以做得更好,但我想保留大部分代码。
System.out.print("enter a number: ");
int input = console.nextInt();
if (input < 0) {
input = input * (-1);
}
String nbr = String.valueOf(input);
int strnbr = nbr.length();
System.out.print("the digits of " + input + " are: ");
int sum = 0;
for (int i = 0; i < strnbr; i++) {
String var = nbr.substring(i, i + 1);
int var1 = Character.getNumericValue(var.charAt(0));
System.out.print(var + " ");
sum = sum + var1;
}
System.out.println();
System.out.println("the sum is: " + sum);