2015-10-15 3 views
-1

Хорошо, поэтому я работаю над программой java для моего колледжа, и теперь я провел много часов, пытаясь понять, что я делаю неправильно.Java Array/Program Issue

Моя программа ниже. Что нужно сделать, это преобразовать целое число в отдельные цифры, а затем добавить все. Он должен отображать исходный номер, отдельные цифры, а затем сумму.

Часть проекта: он должен принимать отрицательные цифры, а затем отображать положительные числа и сумму, однако с моим массивом он отображает -1 как первое число, когда вводится отрицательное число, и я НЕ МОЖЕТ для жизнь меня выясняет, как это исправить.

Пример: ввод -3456 заканчивается отображением -1, 3, 4, 5, 6 и суммой 17, которая, очевидно, неверна.

Любая помощь была бы чрезвычайно оценена, спасибо!

import java.util.*; 
import javax.swing.JOptionPane; //import package for using dialog boxes 
import java.util.Arrays; //import package for arrays 

public class Project4 
{ 
    public static void main(String args[]) 
    { 

//declares and initialize variables sum & counter 
     int sum = 0; 
     int counter = 1; 



//asks for integer input and stores as a string in numInput 
     String numInput = JOptionPane.showInputDialog(null, "Enter an integer: ", "User Input", JOptionPane.QUESTION_MESSAGE); 
     int input = Integer.parseInt(numInput);//parses the value of numInput as an integer and stores as input 

     int numLength = String.valueOf(input).length();//sets numLength as the length of input 
     int [] varArray = new int[numLength];//initilizes an array to match numLength 

     if(input == (-input))//tests for negative input value 
     { 

     input = (input * (-1));//corrects the negative input value 

      for (int i = 0; i < numLength; i++) //starts a for loop 
      { 

       String var = numInput.substring(i,counter);//stores the value of the number at the location between i and counter as var 

       int numVal = Character.getNumericValue(var.charAt(0));//sets numVal to the numeric value of the character at 0 

       varArray[i] = numVal;//saves the numVal to the array at position i 

       sum = sum + numVal;//adds the sum of the numbers as the loop goes 

       counter++;//increments the counter 
      } 
     } 

     else //starts alternate loop if input was not a negative value 
     {   
      for (int i = 0; i < numLength; i++) 
      { 

       String var = numInput.substring(i,counter); 

       int numVal = Character.getNumericValue(var.charAt(0)); 

       varArray[i] = numVal; 

       sum = sum + numVal; 

       counter++; 

      } 
     } 

     JOptionPane.showMessageDialog(null, "The Digits of Integer Entered " + input + " are: " + Arrays.toString(varArray).replace("[", "").replace("]", "") + "\nThe sum is: " + sum, "NUMBERS", JOptionPane.INFORMATION_MESSAGE); 
     System.exit(0); //exits program and is required when using GUI 

    } 
} 
+0

После 'input = -input;' (а не умножения на -1) у вас есть неотрицательное число. Поэтому не обязательно дублировать код (если вы отредактируете строку numInput). – laune

+0

Если вам не нужно хранить цифры в массиве, предпочтительным является * арифметическое вычисление суммы цифр. – laune

ответ

3
if(input == (-input)) 

не испытывает отрицательных входов, он проверяет, является ли входной 0.

if(input < 0) 

тесты для отрицательного входа.

0

Заменить условие

if(input == (-input)) 

По

if(Math.signum(input) == -1.0) 

Или

if(input < 0) 
+0

Использование signum слишком гонзо. Ломать бабочки на колесе ... – laune

+0

Согласитесь, но если вы хотите проверить его встроенным методом, то вы можете использовать его –

+1

Aw, shacks. вы можете вызвать Math.exp (ввод) и посмотреть, является ли это = = 1. :-) В любой реальной организации вы получите выговор за кодирование обходным способом. – laune

1

Всегда избежать, если.

input = Math.abs(input); 

Это заботится о знаке и не нуждается в том, если.

В то время как я на него, это предпочтительный способ вычислить сумму цифр (при условии, вам не нужно хранить цифры в массиве слева направо):

int sum = 0; 
while(input > 0){ 
    sum += input%10; 
    input /= 10; 
} 
0
try { 
    int integerNumber = Integer.parseInt(input);//It may positive or negative 
    if(integerNumber > 0) { 
     //Do the stuff positive number 
    } else if(integerNumber < 0){ 
     integerNumber = (integerNumber * -1); 
     //Do the stuff for negative number 

    } else { 
    System.out.println("Enter Number is zero ::"); 
    } 
}catch(NumberFormatException nfe) { 
    System.out.println("Please Enter a Integer Number :::"+input); 
} 

//I think this code will help for you.