Java负数不为';I don’我不能肯定

Java负数不为';I don’我不能肯定,java,Java,需要得到那个负数,从-2345迭代到2345,然后求和到14。我搞不懂的是,2 3 4 5变成了-2 3 4 5…我缺少语法??也许这只是一行代码或for语句 import java.util.*; public class sumofNumbers{ static Scanner console = new Scanner(System.in); public static void main(String[] args){ int input; int sum =

需要得到那个负数,从-2345迭代到2345,然后求和到14。我搞不懂的是,2 3 4 5变成了-2 3 4 5…我缺少语法??也许这只是一行代码或for语句

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);
    }
import java.util.*;
公共类和数{
静态扫描仪控制台=新扫描仪(System.in);
公共静态void main(字符串[]args){
int输入;
整数和=0;
int strnbr=0;
int计数器=1;
字符串nbr=“”;
System.out.print(“输入一个数字:”);
input=console.nextInt();
如果(输入==(-input)){
输入=输入*(-1);
nbr=字符串.valueOf(输入);
strnbr=nbr.length();
系统输出打印(“输入+的数字为:”);
对于(int i=0;i
}
}

替换以开头的代码

if (input == (-input)) {

System.out.print(“输入+的数字为:”);
输入=Math.abs(输入);
nbr=字符串.valueOf(输入);
strnbr=nbr.length();
对于(int i=0;i

并删除结束括号

主要问题在于您的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);
System.out.print(“输入一个数字:”);
int input=console.nextInt();
如果(输入<0){
输入=输入*(-1);
}
字符串nbr=字符串.valueOf(输入);
int strnbr=nbr.length();
系统输出打印(“输入+的数字为:”);
整数和=0;
对于(int i=0;i
对代码的注释:

  • if(input==(-input))
    只能对
    0
    Integer.MIN\u值
    为真,这两种情况您可能不关心。看起来您的意思是
    if(输入<0)

  • input=input*(-1)
    最好写成
    input=-input

  • 通过以上操作,
    if
    else
    块变得相同,因此您只需要
    if
    来执行
    input=-input

    您甚至可以在不使用
    if
    的情况下通过始终执行
    input=Math.abs(input)
    来完成此操作

  • 计数器是不必要的。您应该使用
    子字符串(i,i+1)
    ,因为这才是您真正的意思

  • substring(i,i+1)。charAt(0)
    是写入
    charAt(i)
    的缓慢方式

  • 要迭代字符串的所有字符,可以调用
    tocharray()
    并使用增强的
    for
    循环

  • print(var+“”)
    中,无论
    var
    是一个一位的
    字符串
    、一个带数字的
    char
    还是一个带数字的
    int
    ,都无关紧要。结果是一样的

  • 由于
    nbr
    只包含字符
    '0'
    '9'
    字符。getNumericValue(ch)
    是表示
    ch-'0'
    的缓慢方式

  • sum=sum+digit
    可以缩短为
    sum+=digit

  • 不要打印到
    系统。错误

  • Java命名惯例规定类名应该以大写字母开头

  • 不要预先声明变量。在需要它们的地方声明它们。这通常也有助于缩小其范围

应用所有这些,将代码更改为:

public class SumOfNumbers {

    static Scanner console = new Scanner(System.in);

    public static void main(String[] args){
        System.out.print("enter a number: ");
        int input = console.nextInt();

        System.out.print("the digits of " + input + " are: ");

        String nbr = String.valueOf(Math.abs(input));
        int sum = 0;
        for (char ch : nbr.toCharArray()) {
            System.out.print(ch + " ");
            sum += ch - '0';
        }
        System.out.println();
        System.out.println("the sum is: " + sum);
    }
}
样本输出:

输入一个数字:-2345
-2345的数字是:2 3 4 5
总数是:14

如果(input==(-input))
是可能的,你怎么期望
呢?从技术上讲,
input
可以是零或
整数.MIN_值
。我刚刚注意到…为什么不直接使用Math.abs,然后,您的逻辑将是相同的输入,在本例中为-2345,并且必须显示为负数,就像输入一样,但间隔数字必须从数字中删除负数。这对我来说毫无意义。当我从输入中删除-时,我得到了带空格的正确答案,但输入的第一个数字-2345显示为2345。无法使用Math.abs(输入)因为这两个数字都是负数或正数…特里迪无法理解您的评论,所以变量设置中的求和和和平均值在哪里?对不起,我以为您有一些编程经验。我已经更新了我的答案。在
Math.abs()之前缺少
=
——<代码>子字符串(i,计数器).charAt(0)
(简称)与
n相同
public class SumOfNumbers {

    static Scanner console = new Scanner(System.in);

    public static void main(String[] args){
        System.out.print("enter a number: ");
        int input = console.nextInt();

        System.out.print("the digits of " + input + " are: ");

        String nbr = String.valueOf(Math.abs(input));
        int sum = 0;
        for (char ch : nbr.toCharArray()) {
            System.out.print(ch + " ");
            sum += ch - '0';
        }
        System.out.println();
        System.out.println("the sum is: " + sum);
    }
}