Java负数并不是正面的

时间:2016-05-12 01:50:42

标签: java

需要将负数从-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);
    }

} }

3 个答案:

答案 0 :(得分:2)

对您的代码的评论:

  • if (input == (-input))只适用于0Integer.MIN_VALUE,这两个您可能并不关心的边缘情况。看起来你的意思是if (input < 0)

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

  • 通过以上操作,ifelse块变得相同,因此您只需要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只包含字符intnbr'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);